public class Ex01 {
public static void main(String[] args) {
Test1 tt; // 이 시점은 클래스가 로딩되는 시점이 아님.
// 클래스가 로딩되는 시점은 객체를 생성하거나 클래스 변수, 클래스 메소드를 사용하는 시점.
System.out.println(Test1.y);
tt = new Test1();
tt.print();
Test1 ob = new Test1();
ob.print();
}
}
클래스가 로딩 될 때 한 번 실행
- 클래스 변수 메모리 할당 - 메소드 영역
- 클래스 변수를 디폴트 값으로 초기화
- 초기화 변수 수식 실행
- static 초기화 블록 실행
객체를 생성할 때 마다 실행
- new Test1(); - 객체를 위한 메모리 할당(인스턴스 변수의 메모리 할당) : a, b, c, d
- 모든 인스턴스 변수는 디폴트 값으로 초기화 : a<- 0, b <- 0, c <-0, d <- 0
- 초기화 수식으로 초기화(존재하는 경우) : b <- 1
- 초기화 블록 실행(존재하는 경우) : d <- 5
- 생성자 몸체 실행
- 생성자 몸체에서 첫번째 문장의 super([인수]); 또는 this([인수]) 실행
- 생성자 몸체 실행
- c <- 10 생성자...
class Test1 {
private int a;
private int b=1;
private int c;
private int d;
public static int x=10;
public static int y;
static {
// static변수의 초기화, 한 번만 실행 : 클래스가 로딩 될 때
y = 20;
System.out.println("static 초기화 블럭");
}
{ //인스턴스 초기화 블럭(객체가 생성될 때 마다 실행)
d = 5;
System.out.println("초기화 블럭"); // 거의 쓰지 않는다.
}
public Test1() {
c = 10;
System.out.println("생성자 ...");
}
public void print() {
System.out.println(a+":"+b+":"+c+":"+d);
}
}
'쌍용강북교육센터 > 7월' 카테고리의 다른 글
0716_Ex03_singleton 패턴 (0) | 2021.07.19 |
---|---|
0716_Ex02_ final (0) | 2021.07.19 |
0715_Ex09_this (0) | 2021.07.18 |
0715_Ex08_this (0) | 2021.07.18 |
0715_Ex07_this (0) | 2021.07.18 |