변수를 선언하고 처음으로 값을 저장하는 것을 변수의 초기화라고 한다.
호출스택은 재사용이 빈번한 메모리이다. 따라서 메서드가 호출될 때마다 원래 있던 지역변수의 값을 덮어쓰는 방식으로 처리한다. 그래서 지역변수는 항상 사용하기 전에 수동 초기화를 해줘야 한다.
멤버변수는 지역변수에 비해 비교적 유지기간이 길고 재사용성이 크기 때문에 기본값으로 자동초기화된다.
명시적 초기화
대입 연산자를 사용해 초기화한다. 가장 기본적이면서 간단한 초기화 방법으로 가장 우선적으로 고려되어야 한다.
초기화 블럭
클래스 초기화 블럭 - 클래스 변수의 복잡한 초기화에 사용된다.
인스턴스 초기화 블럭 - 인스턴스변수의 복잡한 초기화에 사용된다.
인스턴스 초기화 블럭은 단순히 클래스 내에 블럭을 만들고 안에 코드를 작성하기만 하면 된다.
클래스 초기화 블럭은 인스턴스 초기화 블럭 앞에 static
을 붙히면 된다.
클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될 때 한번만 수행되며, 인스턴스 초기화 블럭은 인스턴스를 생성할 때마다 수행된다.
생성자
클래스 변수 초기화 시점: 클래스가 처음 로딩될 때(메모리에 올라갈 때) 한번
인스턴스 변수 초기화 시점: 인스턴스가 생성될 때마다
class InitTest {
static int cv = 1;
int iv = 1;
static {
cv = 2;
}
{
iv = 2;
}
InitTest() {
iv = 3;
}
}