/ JAVAJUNGSUK

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;
	}
}