기록

[이해하기] java/initialize block 본문

제대로 이해하기

[이해하기] java/initialize block

youngyin 2022. 9. 10. 22:00

1. 개요

해당 포스팅에서는 초기화의 방법과 초기화가 이루어지는 시점에 대해서 정리하고자 한다. 자바에서는 필드를 초기화 하기 위해 아래와 같은 방법들을 활용할 수 있다.

(1) 명시적 초기화
(2) 생성자를 이용한 초기화
(3) 초기화 블록을 이용한 초기화

2. 명시적 초기화

class JavaModel{
    private int num = 10;
}

3. 생성자를 이용한 초기화

class JavaModel{
    private int num;

    public JavaModel(int num) {
        this.num = num;
    }
}

4. 초기화 블록을 이용한 초기화

(1) 인스턴스 초기화 블록

인스턴스가 생성될때마다 실행된다.

class JavaModel{
    private int num;

    {
        num = 100;
    }
}

(2) 클래스 초기화 블록

클래스가 처음으로 메모리에 로드될 때 한번만 실행된다.

class JavaModel{
    private static int staticNum;

    static {
        staticNum = 100;
    }
}

5. 초기화 순서

class JavaInitializeTest {

    @Test
    @DisplayName("초기화 블록 테스트")
    void test() {
        for (int i = 1; i<=3; i++) {
            System.out.println("\n******** model"+i+" test");
            new JavaModel();
        }
    }
}

class JavaModel{
    private int num = 10; // 명시적 초기화
    private static int staticNum = 10; // 명시적 초기화

    {
        System.out.println("초기화 블럭 호출(1)");
        num = 100;
    }

    static {
        System.out.println("static 초기화 블럭 호출(1)");
        staticNum = 100;
    }

    {
        System.out.println("초기화 블럭 호출(2)");
    }

    static {
        System.out.println("static 초기화 블럭 호출(2)");
    }

    public JavaModel() {
        System.out.println("생성자 호출");
    }
}

  1. 명시적 초기화 
  2. 클래스 초기화 블록을 이용한 초기화(초기화 블록은 여러 개 선언할 수 있으며, 선언한 순서대로 호출됨)
  3. 인스턴스 초기화 블록을 이용한 초기화(초기화 블록은 여러 개 선언할 수 있으며, 선언한 순서대로 호출됨)
  4. 생성자 초기화

순서대로 호출되어 초기화됨을 확인할 수 있었다.

'제대로 이해하기' 카테고리의 다른 글

Java/Labeled Loop  (0) 2024.04.26
[이해하기] DB/ANSI SQL, JOIN  (0) 2022.09.11
[이해하기] Android/API와 SDK  (0) 2022.05.24
[이해하기] kotlin/컬렉션  (0) 2022.03.27
[이해하기] kotlin/Null 처리하기  (0) 2022.03.27
Comments