Java 클래스 멤버 변수 초기화 순서

Gunjoo Ahn·2022년 8월 14일
0

클래스 변수와 인스턴스 변수

클래스 변수 ( static 변수 ) : 클래스별로 유일
인스턴스 변수 : 인스턴스가 소유하는 변수

클래스 변수의 초기화 : 클래스가 처음 메모리에 로딩될 때 단 한번 차례대로 수행, 순서는

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

인스턴스 변수의 초기화 : 인스턴스를 생성할 때마다 차례대로 수행, 순서는

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

class InitTest{
	static int classVariable = 1;  //명시적 초기화부분
    int instanceVariable = 1;
    
    static { classVariable = 2; } // 클래스 초기화 블럭
    { instanceVariable = 2; } // 인스턴스 초기화 블럭
    
    InitTest(){ // 생성자
    	instanceVariable = 3;
    }
}

클래스 초기화

  1. 클래스 로더가 링킹 단계에서 클래스에서 필요한 메모리를 할당하면서, 클래스 변수에 기본값 0으로 초기화한다.
  2. 클래스 로더가 초기화 단계에서 명시적 초기화에 의해 classVariable을 1로 초기화한다.
  3. 마지막으로 클래스 초기화 블록에 의하여 classVariable에 2를 저장한다.

인스턴스 초기화

  1. 인스턴스가 생성되면서 instanceVariable은 heap 영역에 존재하게 된다. 기본값 0으로 저장된다.
  2. 명시적 초기화로 instanceVariable에 1이 저장된다.
  3. 인스턴스 초기화 블록에 의하여 instanceVariable에 2가 저장된다.
  4. 마지막으로 생성자에 의해 instanceVariable에 3이 저장된다.

Reference

https://cano721.tistory.com/130

profile
Backend Developer

0개의 댓글