Published 2022. 2. 13. 21:54

Ch6-38 변수의 초기화

 

- 지역변수(lv)는 수동 초기화 해야함(사용전)

- 멤버변수(iv, cv)는 자동 초기화 된다.

 

class InitTest{
	int x;  // 인스턴스 변수
    int y = x;  // 인스턴스 변수
    
    void method1(){
    	int i;  // 지역 변수
        int j = i;  // 에러, 지역변수를 초기화 하지 않고 사용
        }
}

 

자료형 기본값
boolean false
char '\u0000'
byte, short, int 0
long 0L
float 0.0f
double 0.0d 또는 0.0
참조형 null

 

 

Ch6-39 멤버변수의 초기화

 

1. 명시적 초기화(=)

class car{
	int door = 4; // 기본형(primitive type) 변수의 초기화
    Engine e = new Engine(); // 참조형(reference type) 변수의 초기화
}

 

 

2. 초기화 블럭

 인스턴스 초기화 블럭 : {}

 클래스 초기화 블럭 : static {}

 

 

3. 생성자

Car(String color, String gearType, int door){ // 매개변수 있는 생성자
	this.color = color;
    this.gearType = gearType;
    this.door = door;
}

 

 

 

Ch6-39 멤버변수의 초기화 - static {}

1. 명시적 초기화(=)

2. 초기화 블럭 - {}, static {}

3. 생성자(iv초기화)

 

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

 

 

1. 클래스 변수 초기화 시점 : 클래스가 처음 로딩될 때 단 한 번(메모리에 올라 갈 때)

2. 인스턴스 변수 초기화 시점 : 인스턴스가 생성될 때 마다

class InitTest{
	static int cv = 1;  // 명시적 초기화
    int iv = 1; // 명시적 초기화
    
    static { cv = 2; } // 클래스 초기화 블럭
    { iv = 2; } // 인스턴스 초기화 블럭
    
    InitTest() { // 생성자
    	iv = 3;
    }
}
클래스 초기화 인스턴스 초기화
기본값 명시적 초기화 클래스 초기화 블럭 기본값 명시적 초기화 인스턴스 초기화 블럭 생성자
cv 0
자동
cv 1
간단(=)
cv 2
복잡(static)
cv 2

iv 0 자동
cv 2

iv 1 간단(=)
cv 2

iv 2
cv 2 

iv 3
1 2 3 4 5 6 7

'JAVA > Chapter6' 카테고리의 다른 글

Ch6-36_생성자 this()  (0) 2022.02.13
Ch6-32_생성자(constructor)  (0) 2022.02.13
Ch6-30_오버로딩(overloading)  (0) 2022.02.13
Ch6-26_static 메서드와 인스턴스 메서드  (0) 2022.02.13
Ch6-24_참조형 매개변수  (0) 2022.02.13
복사했습니다!