명시적 초기화란, 변수를 선언과 동시에 초기화하는 방법
class Human {
int age = 10;
}
클래스 초기화 블럭
클래스 변수의 복잡한 초기화에 사용
클래스가 메모리에 처음 로딩될 때 한번만 수행
인스턴스 초기화 블럭
인스턴스 변수의 복잡한 초기화에 사용
생성자와 같이 인스턴스를 생성할 때마다 수행
class InitBlock{
static { /* 클래스 초기화블럭 */}
{ /* 인스턴스 초기화블럭 */}
//...
}
class BlockTest {
//클래스 변수 초기화 블럭
static {
System.out.println("클래스 변수 초기화 블럭 { }");
}
//인스턴스 변수 초기화 블럭
{
System.out.println("인스턴스 변수 초기화 블럭 { }");
}
//생성자
public InitTest() {
System.out.println("생성자");
}
public static void main(String args[]) {
InitTest it = new InitTest();
}
}
| 자료형 | 기본값 |
|---|---|
| byte | 0 |
| short | 0 |
| int | 0 |
| long | 0L |
| float | 0.0f |
| double | 0.0d |
| char | '\n0000’ |
| boolean | false |
| 참조형 변수 | null |
초기화 시기: 클래스가 처음 로딩될 때 단 한번 초기화
초기화 순서 : 기본값 -> 명시적초기화 -> 클래스 초기화 블럭
초기화 시기: 인스턴스가 생성될 때마다
초기화 순서 : 기본값 -> 명시적 초기화 -> 인스턴스 초기화 블럭 -> 생성자
예시)
public class InitializationOrder {
// 클래스 변수 (static 변수)
// 명시적 초기화
public static int staticVar = initializeStaticVar();
// 인스턴스 변수
// 명시적 초기화
public int instanceVar = initializeInstanceVar();
// 클래스 변수 초기화 블록
static {
System.out.println("Static Initialization Block");
}
// 인스턴스 초기화 블록
{
System.out.println("Instance Initialization Block");
}
// 생성자
public InitializationOrder() {
System.out.println("Constructor");
}
private static int initializeStaticVar() {
System.out.println("Static Variable Initialization");
return 10;
}
private int initializeInstanceVar() {
System.out.println("Instance Variable Initialization");
return 20;
}
public static void main(String[] args) {
System.out.println("Main Method");
// 인스턴스 생성
InitializationOrder obj = new InitializationOrder();
InitializationOrder obj2 = new InitializationOrder();
}
}
