pej4303 / java-study

자바의 정석 스터디 입니다.
1 stars 1 forks source link

인스턴스 변수의 초기화 순서 #3

Closed kha212 closed 1 year ago

kha212 commented 1 year ago

인스턴스 초기화 블록 후 인스턴스 변수 명시적 초기화시 값 변경됨 해당 소스가 오류없이 되는 이유 확인 필요

class Test { 
 {
    tmp = 2;  
    System.out.println("초기화 블록");
    System.out.println(this.tmp);
  }
  float tmp = 1;
}

class Main {
  public static void main(String[] args) {
    Test t = new Test();
    System.out.println("[Main] t.tmp : " + t.tmp);
    t.tmp = 100;
    System.out.println("[Main] t.tmp : " + t.tmp);
  }
}
[결과]
초기화 블록
2.0
[Main] t.tmp : 1.0
[Main] t.tmp : 100.0
pej4303 commented 1 year ago

링크 참조

pej4303 commented 1 year ago

java 바이너리 코드를 확인해본 결과 순차적으로 코드 실행을 하는 것으로 판단됨.

public class InitializationBlock {
    int tmp = 1;
    {
        tmp = 3;  
        System.out.println("초기화 블록");
        System.out.println(this.tmp);
    }

    public static void main(String[] args) {
        InitializationBlock t = new InitializationBlock();
       System.out.println("[Main] t.tmp : " + t.tmp);
    }
}
[결과]
초기화 블록
3
[Main] t.tmp : 3