1) 지역변수는 직접 초기화해줘야 함 - 필수*
//변수 초기화 에러 예시
class InitTest {
int x; //인스턴스 변수
int y=x; //인스턴스 변수
void method1() {
int i; //지역변수
int j=i; //에러 : 지역변수를 초기화 하지 않고 사용
}
}
cv와 iv 초기화에는 자동초기화, 간단초기화, 복잡초기화 3가지 방법이 있다.
자동초기화는 저절로 0으로 초기화되고 간단초기화는 대입(=)연산자를 사용하고, 복잡초기화는 {}, static{}, 생성자를 사용한다.
1) 명시적 초기화(=) : 간단 초기화, 대입연산자를 이용해 초기화한다.
class Car {
int door=4; //기본형 변수(primitive type)의 초기화
Engine e=new Engine(); //참조형 변수(reference type)의 초기화
}
2) 초기화 블럭 : 복잡한 초기화에 사용함. 여러 문장을 넣을 수 있다.
class StaticBlockTest {
static int[] arr=new int[10]; //명시적 초기화
//cv 복잡초기화
static { //클래스 초기화 블럭 - 배열arr을 난수로 채운다.
for(int i=0; i<arr.length; i++) {
arr[i]=(int)(Math.random()*10)+1;
}
}
}
3) 생성자 : iv초기화에 사용, 복잡한 초기화에 사용함.
class Car(String color, String gearType, int door) {//매개변수 있는 생성자
this.color=color;
this.gearType=gearType;
this.door=door;
}
1) 클래스 변수(cv)는 클래스가 처음 로딩될 때(=메모리에 올라갈 때) 단 한번 초기화된다.
2) 인스턴스 변수(iv)는 인스턴스가 생성될 때마다 초기화
class InitTest {
static int cv=1; //명시적 초기화
int iv=1; //명시적 초기화
static { cv=2; } // 클래스 초기화 블럭
{ iv=2; } // 인스턴스 초기화 블럭
InitTest() { //생성자
iv=3;
}
}