class InitTest {
int x; // iv
int y = x; // iv
void method1() {
int i;
int j = i; // ERROR:lv를 초기화하지 않고 사용
}
}
지역 변수는 메서드가 호출되어 작업하는 동안만 존재하기 때문에 생명주기가 짧다.
메서드는 빨리 실행하고 제거해야 하기 때문에 지역 변수를 항상 0으로 초기화하면 성능이 떨어진다.
멤버 변수는 자동 초기화 안하면 사용자가 초기화 해야 할 것이 많아지기 때문이다.
int door = 4; // primitive type 변수의 초기화
Engine e = new Engine(); // reference type 변수의 초기화
class StaticBlockTest {
static int[] arr = new int[10]; // 명시적 초기화
static {
for (int i = 0; i < arr.length; i++) { // 복잡 초기화
arr[i] = (int) (Math.random() * 10) + 1;
}
}
}
class InitTest {
// 간단 초기화
// 명시적 초기화
static int cv = 1;
int iv = 1;
// 복잡 초기화
static { cv = 2; } // 클래스 초기화 블럭
{ iv = 2; } // 인스턴스 초기화 블럭
InitTest() { // 생성자
iv = 3;
}
}