JAVA

[JAVA] 객체지향 - 초기화 블록

해니01_15 2023. 2. 28. 21:59

초기화 블록(initialization block) : 

클래스 필드의 초기화만을 담당하는 중괄호 { }로 둘러싸인 블록을 의미한다. 

 

초기화 블록은 생성자보다 먼저 호출되고, static 키워드의 유무에 따라 두개로 나뉜다. 

 

▶인스턴스 초기화 블록 : 중괄호{ }만을 사용하여 정의

▶클래스 초기화 블록  : 인스턴스 초기화 블록에 static 키워드를 추가하여 정의

 

class test {
	int a;
	static int b;

//일반 초기화 블록
	{
		a = 10;
	}

// static 초기화 블록 
	static {
		b = 20;
	}
}

 

 

< 멤버변수 초기값 할당 되는 순서 >

 

1. 멤버변수 기본 값 자동 할당 

     → 기본값 : 숫자타입 ( 0 ) / 객체타입 ( null) / boolean (false) 
2. 멤버 변수 선언 시 할당 한 값
3. 초기화 블록에서 할당 한 값
4. 생성자에서 할당 한 값 

 

class InitTest {
	int a = 1;
	static int b = 2; //
	// 제일 먼저 선언 할때 할당 하는것

	{// 일반 초기 화 블록
		System.out.println("초기화 블록에서 변경 전 a :" + a);
		a = 10;
	} // 초기화 블록이 두번쨰로

	static { // 스테틱 초기화 블록
		System.out.println("초기화 블록에서 변경 전 b :" + b);
		b = 20;
	} // 초기화 블럭이 두번쨰

	InitTest() {
		System.out.println("생성자에서 변경 전 a : " + a + " / b : " + b);
		a = 100;
		b = 200;
	}// 생성자 블록에서 초기화

}

public class 멤버변수초기화블록 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		System.out.println("메인 객체  생성 전");
		System.out.println("b :" + InitTest.b);

		InitTest it = new InitTest();
		System.out.println("메인 객체  생성 후");
		System.out.println("a : " + it.a);
		System.out.println("b :" + InitTest.b);
	}
}