정적 블록이 실행되기 전에도 클래스 로딩 시 정적 변수가 생성되며 정적 블록의 목적은 정적 변수에 값을 할당하는 것입니다. 정적 변수는 정의된 클래스의 모든 인스턴스 간에 공유되는 값을 저장하고 정적 블록은 클래스가 처음 로드될 때 실행되는 코드 섹션입니다. 클래스 로딩 시 실행되어야 하는 로직을 원한다면 해당 로직은 클래스 로딩 시 실행될 수 있도록 정적 블록 내부에 배치해야 합니다.
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