본문 바로가기
Java

자바 중급 022. 인스턴스 초기화 블럭, 정적 초기화 블럭,초기화 순서(2)

by Smart Factory in 2020 2021. 9. 9.
728x90
반응형

안녕하세요. 스마트팩토리입니다.
자바 중급 022. 인스턴스 초기화 블럭, 정적 초기화 블럭,초기화 순서(2)에 대해 알아보겠습니다. 

1. 초기화 순서에 대한 이해

 (1) 클래스 변수 초기화 순서 .
- 기본값 --> 명시적 초기화 --> 클래스 초기화 블럭
 (2) 인스턴스 변수 초기화 순서 
- 기본값 --> 명시적 초기화 --> 인스턴스 초기화 블럭 --> 생성자 

<<Count.java 클래스>>

정적 초기화 블럭과 인스턴스 초기화 블럭, 기본생성자 show()메소드로 구성되어 있는 클래스를 작성하였습니다. 

인스턴스를 생성하게 되면  

정적 초기화 블럭--> 인스턴스 초기화 블럭--> 기본생성자 호출이 될 것입니다. 

 

package tstory21_01;

public class Count {
static int num;
int coutnum;

static {
System.out.println("정적 초기화 블럭 ");

Count.num=10;
}

{
System.out.println(" 인스턴스 초기화 블럭");
++Count.num;
this.coutnum=Count.num;
}

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

public void  show() {
 System.out.println("Count.num :"+ Count.num+", countnum : "+this.coutnum);
}

}

가. 객체 먼저 2개 생성 후 메소드

<<CountEx.java 실행클래스>> 

c1객체를 먼저 생성합니다. 

초기화 순서는 

c1객체 생성이 있기에 

1. 정적 초기화 블럭      (num=10)
2. 인스턴스 초기화 블럭 (Count.=11, coutnum=11)  
3. 기본생성자 호출 

 c2 객체 생성을 해야 하기에 
4. 인스턴스 초기화 블럭 (Count.num=12, coutnum=12)
5. 기본생성자 호출입니다. 

이후 show()메소드 호출을 실행하면 

c1.show()는 Count.num: 12, coutnum: 11  ( Count.num 은 클래스멤버 변수값이기 때문에 12를 최종값으로 한다.)

c2.show()는 Count.num: 12, icoutnum 12  나오게 됩니다. 

package tstory21_01;

public class CountEx {

public static void main(String[] args) {
Count c1=new Count();
Count c2=new Count();
 c1.show();
 c2.show();
 }
 }

 

나.  객체 와 메소드   2개 순차로 생성

<<CountEx.java>>

c1 객체 생성후 에 c1.show() 메소드를 실행하고 다음에 

c1객체를 생성하는 코드입니다. 순서가 바뀌어서 메소드 값도 변경이 되는 것을 알 수 있습니다. 

초기화 순서는

c1객체 생성이 있기에 

1. 정적 초기화 블럭   ( Count.num=10)
2. 인스턴스 초기화 블럭 (Count.num=11, countnum=11)
3. 기본생성자 호출
4. c1.show() 실행

 Count.num: 11, counnum: 11


 c2 객체 생성을 해야 하기에 
4. 인스턴스 초기화 블럭  (Count.num=12, countnum=12)
5. 기본생성자 호출입니다. 

이후 show()메소드 호출을 실행하면 

c2.show()는 Count.num: 12, coutnum: 12  나오게 됩니다. 

 

package tstory21_01;

public class CountEx {

public static void main(String[] args) {
Count c1=new Count();
 c1.show();
 Count c2=new Count();
 c2.show();
 }
 }

다. 번외 

c1. show()를 마지막에 하나더 추가하면 

c1.show()는 Count.num: 12, coutnum: 11  나오게 됩니다. 

728x90
반응형

댓글