Java

초기화 블록

오개발 2024. 10. 29. 23:27
public class IntegerStudy {
    public static void main(String[] arddddgs) {

        new Test();
    }

    static class Test {
        int a = 1;
        static int b = 2; //
        // 제일 먼저 선언 할때 할당 하는것

        {// 일반 초기 화 블록
            System.out.println("일반 초기 화 11111111111");
            System.out.println("초기화 블록에서 변경 전 a :" + a);
            a = 10;
        } // 초기화 블록이 두번쨰로

        static { // 스테틱 초기화 블록
            System.out.println("스테틱 초기화 블록 22222222222");
            System.out.println("초기화 블록에서 변경 전 b :" + b);
            b = 20;
        } // 초기화 블럭이 두번쨰

        Test() {
            System.out.println("생성자에서 변경 전 a : " + a + " / b : " + b);
            a = 100;
            b = 200;
        }// 생성자 블록에서 초기화

    }
}

 

결과값 : 

 

 

 

해당값은 인스턴스 초기화 블록이다.

        {// 일반 초기 화 블록
            System.out.println("일반 초기 화 11111111111");
            System.out.println("초기화 블록에서 변경 전 a :" + a);
            a = 10;
        } // 초기화 블록이 두번쨰로
        
        
        Test() {
            System.out.println("생성자에서 변경 전 a : " + a + " / b : " + b);
            a = 100;
            b = 200;
        }// 생성자 블록에서 초기화

 

 

클래스 초기화 블록

 

        static { // 스테틱 초기화 블록
            System.out.println("스테틱 초기화 블록 22222222222");
            System.out.println("초기화 블록에서 변경 전 b :" + b);
            b = 20;
        } // 초기화 블럭이 두번쨰

 

 

여기서 클래스 초기화 블록은 최초에 실행시에 한번 실행됩니다.

최초에 메모리에 적재되기 때문이다. 그리고 협 영역이 아닌 메서드 영역에 위치한다.

힙 영역은 주로 인스턴스 객체들이 위치하는 반면, 메서드 영역은 클래스 정보, 정적 필드, 메서드, 상수 풀 등이 위치하는 영역입니다

 

따라서 정적 자원은 JVM이 실행되는 동안 메모리에 상주하며, 프로그램이 종료되거나 클래스가 메모리에서 언로드(unload)될 때까지 유지됩니다.

 

 

 

public class IntegerStudy {
    public static void main(String[] arddddgs) {

        for (int i = 0; i < 10; i++) {
            new Test();
        }
    }

    static class Test {
        int a = 1;
        static int b = 2; //
        // 제일 먼저 선언 할때 할당 하는것

        {// 일반 초기 화 블록
            System.out.println("일반 초기 화 11111111111");
            System.out.println("초기화 블록에서 변경 전 a :" + a);
            a = 10;
        } // 초기화 블록이 두번쨰로

        static { // 스테틱 초기화 블록
            System.out.println("스테틱 초기화 블록 22222222222");
            System.out.println("초기화 블록에서 변경 전 b :" + b);
            b = 20;
        } // 초기화 블럭이 두번쨰

        Test() {
            System.out.println("생성자에서 변경 전 a : " + a + " / b : " + b);
            a = 100;
            b = 200;
        }// 생성자 블록에서 초기화

    }
}

 

10번의 인스턴스를 생성하면 최초 static 1회 호출 되고 그 뒤에 {} 블록 생성자만 지속적으로 호출이 된다. 

'Java' 카테고리의 다른 글

오토 박싱 & 오토 언박싱  (1) 2024.10.30
자바_instanceof (객체타입 확인)  (1) 2024.10.30
스트링 빌더와 스트링 연산 최적화  (3) 2024.10.29
UTF 인코딩  (0) 2024.10.28
2진수와 16진수 +@ 10진수  (0) 2024.10.18