Ch6-38~41. 초기화
0. 목차
Chapter6. 객체지향 프로그래밍Ⅰ
Ch6 - 38. 변수의 초기화
Ch6 - 39. 멤버변수의 초기화
Ch6 - 40. 멤버변수의 초기화 예제1
Ch6 - 41. 멤버변수의 초기화 예제2
Ch6 - 38. 변수의 초기화
▶ 지역변수(lv)
▷ 사용 전 반드시 수동 초기화 해야 함
▷ 멤버변수(iv, cv)는 자동 초기화 됨
class InitTest{
int x; // iv, 자동 초기화, x = 0
int y = x; // iv, y = x = 0
void method1() {
int i; // lv, 자동 초기화 안됨
int j = i; // lv, j = i = ?, 자동 초기화× → 어떤 값 들어있는 지 모름
}
}
Ch6 - 39. 멤버변수의 초기화
▶ 멤버변수란?
▷ iv와 cv
▶ 자동 초기화
▶ 간단 초기화
▷ 명시적 초기화 : =
class Car {
int door = 4; // 기본형 변수의 초기화
Engine e = new Engine(); // 참조형 변수의 초기화
}
▶ 복잡 초기화
▷ 초기화 블럭 : {}, static {}
- 인스턴스(iv) 초기화 블럭 : {} → 거의 사용하지 않음, 생성자로 사용
- 클래스(cv) 초기화 블럭 : static {}
▷ 생성자
- 인스턴스(iv) 초기화 블럭
▶ 멤버변수의 초기화 시점
▷ 클래스 변수 초기화 시점 : 클래스가 처음 로딩될 때, 단 한번
▷ 인스턴스 변수 초기화 시점 : 인스턴스가 생성될 때마다
▶ 멤버변수의 초기화 순서
▷ cv → iv
▷ 자동 → 간단 → 복잡
Ch6 - 40. 멤버변수의 초기화 예제1
▶ 간단 초기화, 복잡 초기화
class StaticBlockTest {
static int[] arr = new int[10]; // 간단 초기화, 명시적 초기화
static { // 복잡 초기화 : 배열 arr을 난수로 채움
for(int i = 0; i < arr.length; i++) {
arr[i] = (int)(Math.random() * 10) + 1;
}
}
}
Ch6 - 41. 멤버변수의 초기화 예제2
▶ 간단 초기화, 복잡 초기화, 초기화 순서
class InintTest {
static int cv = 1; // 명시적 초기화
int iv = 1; // 명시적 초기화
static { cv = 2; } // 클래스 초기화 블럭
{ iv = 2; } // 인스턴스 초기화 블럭
InintTest() { // 생성자
iv = 3;
}
}