해당 문제와 비슷한 경우를 겪고 정리하고자 기록을 남긴다.
프로그램이 실행되면 클래스에 대한 정보가 메모리에 로드된다. new 키워드로 객체가 생성된다. 독립된 데이터 공간(변수)을 실제 메모리상에 가지는 실체화가 된다. 이것을 인스턴스라고 한다. (instance)
이때 객체는 인스턴스 될 때 생성자를 제일 먼저 거친다
다음 클래스를 실행시켰을 때, 생성자보다 메서드를 먼저 거치는 것을 확인할 수 있었다.
public class Wilt {
int var = getVal();
public Wilt() {
System.out.println("In Default Constructor");
}
public int getVal() {
System.out.println("In Method");
return 1;
}
public static void main(String[] args) {
Wilt a = new Wilt();
}
}
output
In Method.
In Default Constructor
int var = getVal()
과 같은 인스턴스 변수 초기화 식은
슈퍼 클래스 생성자가 실행된 후 현재 클래스 생성자의 본문을 실행하기 전에 evaluated.
따라서 Wilt 생성자의 본문이 실행되기 전에 getVal()이 호출된다.