📚 참고
자바의 정석 기초편 (객체지향개념만)
변수 초기화
- 지역변수(lv)는 수동 초기화 해야한다. (사용 전, 꼭)
- 멤버변수(iv, cv)는 자동 초기화된다.
class InitTest {
// 인스턴스 변수
int x;
int y = x;
void method1() {
// 지역 변수
int i;
int j = i; // 🚩에러 ➡ 지역변수를 초기화하지 않고 사용
}
}
자동 초기화
수동 초기화
멤버변수(iv, cv) 초기화
1. 명시적 초기화 ( 간단 초기화, = )
class Car {
int door = 4; // 기본형 변수의 초기화
Engine e = new Engine(); // 참조형 변수의 초기화
}
- 참조형 변수에 객체 주소 값을 넣어주는 것이 초기화
- 참조형 변수에 들어갈 수 있는 값
- null (기본값)
- 객체주소
2. 초기화 블럭 ( 복잡 초기화, { } )
- 인스턴스 초기화 블럭 : { } (잘 안 씀)
- 클래스 초기화 블럭 : static { }
class StaticBlockTest {
// 간단 초기화
static int[] arr = new int[10];
// 복잡 초기화
static {
for(int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * 10) + 1
}
}
}
3. 생성자 ( 복잡 초기화, iv 초기화 )
Car(String color, String gearType, int door) { // 매개변수 있는 생성자
this.color = color;
this.gearType = gearType;
this.door = door;
}
정리
멤버변수 초기화 방법
- 자동 초기화 : 0, null
- 간단 초기화 : =
- 복잡 초기화
- cv : static { }
- iv : { }, 생성자
멤벼변수의 초기화 시점
- 클래스 변수 초기화 시점 : 클래스가 처음 로딩될 때(메모리에 올라갈 때) 단 한번
- 인스턴스 변수 초기화 시점 : 인스턴스가 생성될 때마다
class InitTest {
// 명시적 초기화
static int cv = 1;
int iv = 1;
static { cv = 2; } // 클래스 초기화 블럭
{ iv = 2; } // 인스턴스 초기화 블럭
InitTest { // 생성자
iv = 3;
}
}
정리
초기화 순서
- cv ➡ iv
- 자동 ➡ 간단 (=) ➡ 복잡 (초기화 블럭, 생성자)