Programming/Java2014. 3. 12. 18:18
정적 초기화 / static initalize는 
static member variable에 대한 초기화를 수행하는 루틴이다.

static 변수들의 경우 해당 클래스가 인스턴스화 되어 메모리에 올려지지 않더라도(힙에 할당)
스택에서 바로 실행이 되어야 하는 부분이므로
main문이 실행되기 전에 클래스 초기화를 하며 static에 상주하게 되며
static initialize block을 통해 조금은 더 복잡한 구문을 지원하게 된다. (try-catch등의 복잡한)

어떻게 보면.. 일종의 static 변수들에 대한 constructor 라고 볼 수 있으려나?

public class StaticTest4 {
static
{
System.out.println("Statis init1");
}

static String s = echo("string");
static
{
System.out.println("Statis init2");
}

static String echo(String s)
{
System.out.println(s);
return s;
}

public static void main(String[] args)
{
// TODO Auto-generated method stub
System.out.println("main");
StaticTest4 st4 = new StaticTest4();
}

}
 

결과는 main 문에 들어가기 전에 static 에 대한 초기화를 먼저 수행함을 볼 수 있다.
Static init1
string
Static init2
main 

[링크 : http://raoo.tistory.com/54]
[링크 : http://cafe.naver.com/hanbitria/15]

 This works well when the initialization value is available and the initialization can be put on one line. However, this form of initialization has limitations because of its simplicity. If initialization requires some logic (for example, error handling or a for loop to fill a complex array), simple assignment is inadequate. Instance variables can be initialized in constructors, where error handling or other logic can be used. To provide the same capability for class variables, the Java programming language includes static initialization blocks.
[링크 : http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html


'Programming > Java' 카테고리의 다른 글

java string.intern()  (0) 2014.03.12
java bytecode decompiler - javap  (0) 2014.03.12
java 1.5 이후 추가 for-each / varargs(autoboxing)  (0) 2014.03.11
JUnit 사용 예  (0) 2014.03.11
java class default access modifier  (0) 2014.03.11
Posted by 구차니