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 |