반응형
문득, JVM구조를 공부하다가 초기화 순서가 정확히 어떻게 진행 될까? 생각해본적이 있다.
언제 초기화 되는걸까?
- 인스턴스를 생성할 때(new 객체 생성)
- 클래스의 정적 메소드를 호출할 때 클래스가 초기화됨
- 클래스의 정적 변수 값이 할당되거나 사용될 때
초기화 순서는?
- 정적 변수 초기화
- 필드가 선언된 순서대로 초기화
- 정적 블록 실행
- static {}
- 간혹 정적 블록이 먼저 실행될 수도 있음
- 인스턴스 변수 초기화
- 인스턴스 변수가 선언된 순서대로 초기화됨
- 인스턴스 블록 초기화
- {}
- 생성자 실행
예제
class Example {
static int staticVar = initializeStaticVar();
static {
System.out.println("정적 블록 실행");
}
int instanceVar = initializeInstanceVar();
{
System.out.println("인스턴스 초기화 블록 실행");
}
Example() {
System.out.println("생성자 실행");
}
static int initializeStaticVar() {
System.out.println("정적 변수 초기화");
return 100;
}
int initializeInstanceVar() {
System.out.println("인스턴스 변수 초기화");
return 200;
}
public static void main(String[] args) {
System.out.println("main 메소드 실행");
Example ex1 = new Example();
Example ex2 = new Example();
}
}
결과
정적 변수 초기화
정적 블록 실행
main 메소드 실행
인스턴스 변수 초기화
인스턴스 초기화 블록 실행
생성자 실행
인스턴스 변수 초기화
인스턴스 초기화 블록 실행
생성자 실행
결론
- 순서: 정적 필드 > 정적 블록 > 인스턴스 필드 > 인스턴스 블록 > 생성자
- 정확한 흐름을 이해하면 예측 가능한 코드 작성이 가능함
반응형
'Java' 카테고리의 다른 글
Java 버전별 변천사 ( Java 6 ~ ) (2) | 2025.03.15 |
---|---|
자바의 특징 (0) | 2025.03.13 |
OpenJDK vs Oracle JDK 차이점 (1) | 2025.03.10 |
[JAVA] JCP, JSR, TCK란? 자바 표준의 개발 과정과 역할 (0) | 2025.03.10 |
쉬운, 클래스와 객체 개념 (1) | 2025.03.05 |