
class InitTest {
int x; //기본 정수값 0으로 초기화
int y = x; //y는 x의 값인 0으로 초기화가 가능.
void method(){
int i;
int j = i; // ERROR!, 지역변수인 i를 초기화 하지 않고 사용됨.
}
}
| 자료형 | 기본값 |
|---|---|
| boolean | false |
| char | '\u0000' |
| byte,short,int | 0 |
| long | 0L |
| float | 0.0f |
| double | 0.0d 또는 0.0 |
| 참조형 변수 | null |
class Car{
int door = 4; //기본형(primaitive type)변수 초기화
Engine engine = new Engine();//참조형(reference type)변수 초기화
}
클래스 초기화 블럭
- 클래스 변수의 복잡한 초기화에 사용.
- 클래스가 메모리에 적재될 때 한번만 실행.
- 클래스 변수의 초기화 순서 : 기본값 -> 명시적 초기화 -> 클래스 초기화 블럭
인스턴스 초기화 블럭
- 인스턴스 변수의 복잡한 초기화에 사용.
- 인스턴스 생성 할 때마다 수행.
- 생성자 보다 먼저 실행 된다.
- 보통 인스턴스 변수의 초기화는 생성자에서 주로 사용하지만, 모든 생성자에서 공통적으로 인스턴스를 초기화 할 때 중복 제거와 오류 발생성을 감소 시켜주기 위해 인스턴스 초기화 블럭에서 초기화.
- 인스턴스 변수의 초기화 순서 : 기본값 -> 명시적 초기화 -> 인스턴스 초기화 블럭 -> 생성자
class Car {
static int id;
int serialNo;
int door;
String color;
static {
id = 0;
} //클래스 초기화 블럭
Car() {
id++;
serialNo = id;
door = 4;
color = "white";
}
Car(String color) {
id++;
serialNo = id;
door = 4;
this.color = color;
}
}
위 코드에서 Car(), Car(String color) 생성자에서 공통적으로 같은 방식으로 인스턴스 변수를 초기화하는 것을 볼 수 있을 것이다. 이 코드를 아래와 같이 수정 할 수 있다.
class Car {
static int id;
int serialNo;
int door;
String color;
static {
id = 0;
}
{
id++;
serialNo = id;
door = 4;
} //인스턴스 초기화 블럭
Car() {
color = "white";
}
Car(String color) {
this.color = color;
}
}