[Java기초이론] 변수의 초기화
변수의 초기화
멤버변수(클래스변수와 인스턴스변수)와 배열의 촘기화는 선택적
지역변수의 초기화는 필수적이다.
각 타입의 기본값
자료형 | 기본값 |
---|---|
boolean | false |
char | ‘\u0000’ |
byte, short, int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d 또는 0.0 |
참조형 변수 | null |
명시적 초기화(explicit initialization)
변수의 선언과 동시에 초기화하는 것을 명시적 초기화라고 한다. 가장 기본적이면서도 간단한 초기화 방법이다.
Class Car{
int door = 4;
Engine e = new Engine();
}
초기화 블럭(initialization block)
클래스 초기화 블럭
과 인스턴스 초기화 블럭
두 가지 종류가 있다.
-
클래스 초기화 블럭 클래스변수의 복잡한 초기화에 사용된다. 인스턴스 초기화 블럭 앞에 단순히 static을 덧붙이면 된다. 메모리에 처음 로딩될 때 한번만 수행된다.
-
인스턴스 초기화 블럭 인스턴스변수의 복잡한 초기화에 사용된다. 클래스 내에 블럭{}을 만들고 그 안에 코드를 작성하기만 하면 된다. 생성자와 같이 인스턴스를 생성할 때 마다 수행된다.
멤버변수의 초기화 시기와 순서
클래스변수의 초기화 시점 : 클래스가 처음 로딩 될 때 단 한 번 초기화된다.
인스턴스변수의 초기화 시점 : 인스턴스가 생성될 때 마다 각 인스턴스별로 초기화된다.
클래스변수의 초기화 순서 : 기본값->명시적초기화->클래스 초기화 블럭
인스턴스변수의 초기화순서 : 기본값->명시적초기화->인스턴스 초기화 블럭->생성자
classs InitTest{
static int cv = 1;
int iv = 1;
static{ cv = 2; } //클래스 초기화 블럭
{ iv = 2; } //인스턴스 초기화 블럭
InitTest(){ //생성자
iv = 3;
}
}
- cv가 메모리(method area)에 생성되고, cv에는 int형의 기본값인 0이 cv에 저장
- 명시적 초기화(int cv=1)에 의해서 cv에 1이 저장
- 클래스 초기화 블럭(cv=2)이 수행되어 cv에는 2가 저장
- InitTest클래스의 인스턴스가 생성되면서 iv가 메모리(heap)에 존재 iv 역시 int형 변수이므로 기본값 0이 저장
- 명시적 초기화에 의해서 iv에 1이 저장
- 인스턴스 초기화 블럭이 수행되어 iv에 2가 저장
- 마지막으로 생성자가 수행되어 iv에는 3이 저장