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 |