[Java] 변수의 초기화
Java변수를 선언하고 처음으로 값을 저장하는 것.
지역변수는 사용하기 전에 반드시 초기화해야 한다.
선언 예 | 설명 |
---|---|
int i=0; int j=0; | int형 변수 i/j 선언 후 0으로 초기화 한다. |
int i=0, j=0 | 같은 타입의 변수는 콤마(,)를 사용해서 함께 선언/초기화할 수 있다. |
int i=0, long j=0 | error. 타입이 다른 변수는 함께 선언/초기화 할 수 없다. |
int i=0; int j=i | 변수 i에 저장된 값으로 변수 j를 초기화한다. |
int j=i; int i=0 | error. 변수 i가 선언되기 전에 i를 사용할 수 없다. |
명시적 초기화 Explicit initialization
변수를 선언과 동시에 초기화하는 것.
public class Hello{
int a = 0;
String str = "";
}
복잡한 초기화 작업이 필요할 때는 초기화 블럭 또는 생성자를 사용한다.
초기화 블럭 Initialization block
인스턴스 초기화 블럭
클래스 내에 블럭{ }을 만든다.
인스턴스를 생성할 때마다 생성자보다 먼저 수행된다.
모든 생성자에서 공통으로 수행돼야 하는 코드를 넣는다.
public class Hello{
int a = 0;
{
a++;
}
}
수행 순서 : 기본값 - 명시적 초기화 - 인스턴스 초기화 블럭 - 생성자
클래스 초기화 블럭
클래스 내에 static이 붙은 블럭{ }을 만든다.
클래스가 메모리에 처음 로딩될 때 한번만 수행된다.
배열이나 예외 처리가 필요한 초기화에서 추가적으로 사용한다.
public class Hello{
static int arr[] = new int[10];
static {
for(int i = 0; i < 10; i++){
arr[i] = (int) (Math.random() * 10);
}
}
}
수행 순서 : 기본값 - 명시적 초기화 - 클래스 초기화 블럭
멤버변수의 초기화 시기와 순서
public class Hello{
int iv = 1;
static int cv = 1;
static { cv++; }
{ iv++; }
Hello(){ iv++; }
}
• 클래스 초기화 블럭
기본값 | 명시적 초기화 | 클래스 초기화 블럭 | |
---|---|---|---|
cv | 0 | 1 | 2 |
• 인스턴스 초기화 블럭
기본값 | 명시적 초기화 | 인스턴스 초기화 블럭 | 생성자 | |
---|---|---|---|---|
cv | 2 | 2 | 2 | 2 |
iv | 0 | 1 | 2 | 3 |
참고 서적: 자바의 정석 3판