소스 코드를 보다보면 클래스 내부에 중괄호 { } 만으로 이루어지거나 static { } 만으로 이루어진

 

코드 부분이 있는 경우가 종종 있습니다.

 

이들을 초기화 블럭(Initialization block)이라 부르며, 클래스가 실행되면 생성자보다 먼저 실행됩니다.

 

{ } 의 경우에는 클래스가 호출될 때마다 실행되고

 

static { } 의 경우는 정적 요소인 static의 특징답게 클래스가 메모리로 로딩될 때 한번만 실행되며

 

메모리에 상주하게 됩니다.

 

다음은 예제를 보면 확실히 이해할 수 있습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Main {
    static String info;
    
    static {
        System.out.println("static 블록 실행!");
        info = "static 블록 호출!";
    }
    
    public Main() {
        System.out.println("생성자 호출!");
    }
 
    public static void main(String[] args) {
        System.out.println("메인 메소드 호출!");
        
        Main m1 = new Main();
        Main m2 = new Main();
        
        System.out.println(Main.info);
    }
}
cs

 

실행 결과는 <그림 1>과 같습니다.

 

<그림 1>

'JAVA' 카테고리의 다른 글

[Java] try-with-resources를 사용한 자동 리소스 닫기  (0) 2019.07.14