정적 블록이 실행되기 전에도 클래스 로딩 시 정적 변수가 생성되며 정적 블록의 목적은 정적 변수에 값을 할당하는 것입니다. 정적 변수는 정의된 클래스의 모든 인스턴스 간에 공유되는 값을 저장하고 정적 블록은 클래스가 처음 로드될 때 실행되는 코드 섹션입니다. 클래스 로딩 시 실행되어야 하는 로직을 원한다면 해당 로직은 클래스 로딩 시 실행될 수 있도록 정적 블록 내부에 배치해야 합니다.
JVM은 클래스의 정적 멤버를 읽기 위해 다음 단계를 따릅니다.
- 정적 멤버를 위에서 아래로 식별
- 정적 변수 할당 및 정적 블록을 위에서 아래로 실행
- 메인 메소드의 실행
예시
public class StaticFlow {
static int firstNumber = 10;
static {
firstMethod();
System.out.println("first static block");
}
public static void main(String[] args) {
firstMethod();
System.out.println("main method executed");
}
public static void firstMethod() {
System.out.println(secondNumber);
}
static {
System.out.println("second static block");
}
static int secondNumber = 20;
} 출력
0 first static block second static block 20 main method executed