2016-08-25 3 views
-3

아래 코드에서 이니셜 라이저 블록이 호출되지 않는 이유는 무엇입니까? 그러나 main()이이 클래스에서 제거되고 다른 클래스에서로드 될 때 이니셜 라이저 블록이 실행됩니다.이니셜 라이저 블록이 실행되지 않습니다.

public class AAStatic { 
static String s = "a"; 

{ 
    System.out.println("hi"); 
    m1(); 
} 
public static void main(String[] args) { 
    m1(); 
    System.out.println(s); 
} 

static{ 
    m1(); 
} 
static void m1(){ 
    s+="b"; 
} 
} 
+0

는'{'도움이되기 전에'static'를 추가하는 것? –

+3

인스턴스 이니셜 라이저 블록? 인스턴스는 어디서 만듭니 까? –

답변

1

AAStatic 클래스의 인스턴스를 만들지 않으므로. 이니셜 라이저 블록은 생성자 코드보다 먼저 실행됩니다 (명시 적 생성자 암시 적 생성자를 생성하지 않더라도 생성됨).

이니셜 라이저에 static을 추가하면 클래스가로드 될 때 실행됩니다.

1

두 가지 유형의 이니셜 라이저 블록이 있습니다.

statc와 하나는 그래서 당신의 클래스를 초기화 할 수 있도록 클래스를 처음 사용할 때 호출됩니다 Static Initialization Blocks

static{ 
    m1(); 
} 

입니다.

static이없는 것은 인스턴스를 초기화하는 것입니다. 따라서 AAStatic의 인스턴스를 만들지 않으면 해당 블록을 호출하지 않습니다. 시도 :

public static void main(String[] args) { 
    new AAStatic();//new instance here 
    m1(); 
    System.out.println(s); 
} 

심판 :