class InitTest{
int x; //인스턴스 변수
int y = x; //인스턴스 변수(자동초기화 돼서 x의 기본 값 0이 y에 대입된다)
void method1(){
int i; //지역변수
int j =i; //에러!! 지역변수를 초기화하지 않고 사용
}
}
✔ 멤버변수(iv, cv)의 초기화는 총 세가지로 나뉜다
1. 자동초기화(타입별 기본값으로 초기화)
2. 간단 초기화(= 대입연산자 사용)
3. 복잡 초기화(static{} or 생성자)
class Car{
int door = 4; //기본형 변수 초기화
Engine e = new Engine(); //참조형 변수의 초기화
}
- 참조형 변수는 null 기본값이나 객체주소 둘 중 하나가 들어가는데,
위의 경우 Car c = new Car();를 했을때, Engine e = new Engine();
이렇게 객체를 생성해서 넣어주지 않으면 참조변수는 null 값이 들어가게 된다.
그렇다면 차 객체가 생성되면 엔진은 생성되지 않고 null인 상태이기 때문에
위와 같이 참조형 변수를 초기화 해주어야한다
class StaticBlock{
//간단 초기화
static int[] arr = new int[10]; //명시적 초기화
//복잡 초기화
static{//클래스 초기화 블럭 - 배열 arr을 난수로 채운다
for(int i=0; i<arr.length;i++){
arr[i] = (int)(Math.random()*10)+1;
}
}
}
Car (String color, String gearType, int door){
this.color = color;
this.gearType = gearType;
this.door = door;
}
초기화 순서
1. cv 👉 iv
클래스 변수에서 인스턴스 변수로 초기화 되고 클래스 변수는 초기화 되면 다음 객체 생성 시 초기화 되지 않고 인스턴스 변수만 초기화된다
2. 자동 👉 간단 👉복잡