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();
    }
}

클래스가 로딩 될 때 한 번 실행

  1. 클래스 변수 메모리 할당 - 메소드 영역
  2. 클래스 변수를 디폴트 값으로 초기화
  3. 초기화 변수 수식 실행
  4. static 초기화 블록 실행

객체를 생성할 때 마다 실행

  1. new Test1(); - 객체를 위한 메모리 할당(인스턴스 변수의 메모리 할당) : a, b, c, d
  2. 모든 인스턴스 변수는 디폴트 값으로 초기화 : a<- 0, b <- 0, c <-0, d <- 0
  3. 초기화 수식으로 초기화(존재하는 경우) : b <- 1
  4. 초기화 블록 실행(존재하는 경우) : d <- 5
  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

+ Recent posts