Initialization Order of Member Variables

멤버 변수 초기화 순서

static 변수 선언부 -> 필드 변수 선언부 -> 생성자 block

  • static 변수 선언부

    • Method area 에 올라감

    • 클래스가 로드될 때 변수가 가장 먼저 초기화됨

  • 필드 변수 선언부

    • Heap area 에 올라감

    • 객체 생성될 떼 생성자 block보다 앞서 초기화됨

  • 생성자 block

    • Heap area 에 올라감

    • 객체 생성될 때 JVM이 내부적으로 locking 필드 변수 중 finla 변수의 가시화는 생성자 block이 끝난 다음 초기화 됨

    • 필드 변수 선언부에서 이미 초기화되었다면 그 값들을 덮어씀

초기화 시점

  • 클래스 변수

    • 클래스가 처음 로딩될 때 단 한번 초기화

  • 인스턴스 변수

    • 인스턴스가 생성될 때마다 각 인스터스별로 초기화가 이루어짐

초기화 순서

  • 클래스 변수

    • 기본값 -> 명시적 초기화 -> 클래스 초기화 블럭

  • 인스턴스 변수

    • 기본값 -> 명시적 초기화 -> 인스턴스 초기화 블럭 -> 생성자

Last updated