안녕하세요. 스마트팩토리입니다.
자바 중급 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 나오게 됩니다.
'Java' 카테고리의 다른 글
자바 중급 024. 상속(inheritance) -부모클래스 , 자식클래스 관계(2) (0) | 2021.09.10 |
---|---|
자바 중급 023. 상속(inheritance) -부모클래스 , 자식클래스 관계(1) (0) | 2021.09.10 |
자바 중급 021. 인스턴스 초기화 블럭, 정적 초기화 블럭,초기화 순서(1) (0) | 2021.09.08 |
자바 중급 020. 인스턴스 복사 생성자, 인스턴스 복제 (0) | 2021.09.06 |
자바 중급 019. this()- 생성자 , this-참조변수 (0) | 2021.09.06 |
댓글