[Java] Method executed prior to Default Constructor

ss9909·2022년 8월 30일
0

Java

목록 보기
2/5

해당 문제와 비슷한 경우를 겪고 정리하고자 기록을 남긴다.

클래스의 인스턴스

프로그램이 실행되면 클래스에 대한 정보가 메모리에 로드된다. 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()이 호출된다.

해당 문제와 관련된 것으로 Static block등이 더 있을 수 있다.

profile
이름 짓는 게 어려운 사람

0개의 댓글