초기화 블록(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);
}
}
'JAVA' 카테고리의 다른 글
[JAVA] 객체지향 - 접근 제어자 (0) | 2023.02.28 |
---|---|
[JAVA] 객체지향 - fianl 키워드 (0) | 2023.02.28 |
[JAVA] 객체지향 - static (0) | 2023.02.28 |
[JAVA] 객체지향 - this, this( ) (0) | 2023.02.28 |
[JAVA] 객체지향 - 메서드 오버로딩 (0) | 2023.02.28 |