1. 변수의 초기화
- 변수를 선언하고 처음으로 값을 저장하는 것
- 멤버변수 와 배열은 각 타입의 기본값으로 자동초기화되므로 초기화를 생략가능
- 지역변수는 사용전에 꼭!!! 초기화를 해주어야한다.
Class InitTest {
int x; // 인스턴스 변수
int y = x; // 인스턴스 변수
void method1() {
int i; // 지역변수
int j = i; // 컴파일 에러!!! 지역변수를 초기화 없이 사용했음.
}
}
2. 멤버변수의 초기화
- 멤버변수의 초기화 방법
1. 명시적 초기화 ( explicit initialization)
class Car {
int door = 4; // 기본형 변수의 초기화
Engine e = new Engine () ; // 참조형 변수의 초기화
}
2. 생성자 (constructor)
Car(String color , String gearType, int door) {
this.color = color;
this.gearType = gearType;
this.door = door;
}
3. 초기화 블럭 (initialization block)
- 인스턴스 초기화 블럭 : {}
- 클래스 초기화 블럭 : static {}
3. 초기화 블럭 (initialization block)
- 클래스 초기화 블럭 - 클래스변수의 복잡한 초기화에 사용되며 클래스가 로딩될 떄 실행된다.
- 인스턴스 초기화 블럭 - 생성자에서 공통적으로 수행되는 작업에 사용되며,
인스턴스가 생성될 떄 마다 (생성자보다 먼저) 실행된다.
<덧붙임>
- 인스턴스 변수의 초기화는 주로 생성자를 사용하기 때문에, 인스턴스 초기화 블럭은 잘 사용되지 않음. 대신 클래스의 모든 생성자에서 공통적으로 수행되어져야 하는 코드가 있는 경우 인스턴스 초기화 블럭에 넣어 두면 코드의 중복을 줄일 수 있어서 좋다.
위와 같이, 클래스의 모든 생성자에 공통적으로 수행되어야 하는 문장들이 있을 때, 이 문장들을 모두 써 주기 보다 다음과 같이 인스턴스 블럭을 사용하면 코드가 간결해진다.
4. 멤버변수의 초기화 시기와 순서
- 클래스변수 초기화 시점 : 클래스가 처음 로딩될 떄 단 한번.
- 인스턴스변수 초기화 시점 : 인스턴스가 생성될 떄 마다
class InitTest {
static int cv = 1; // 명시적 초기화
int iv = 1; // 명시적 초기화
static { cv = 2; } // 클래스 초기화 블럭
{ iv = 2; } // 인스턴스 초기화 블럭
InitTest() { // 생성자
iv = 3;
}
}
<덧붙임>
위의 실행결과에서도 알 수 있듯이 클래스 초기화 블럭은 처음 메모리에 로딩될 때 한번만 수행되었지만, 인스턴스 초기화 블럭은 인스턴스가 생성될 때 마다 수행되었다.
[참조] 1. http://choijava.blogspot.kr/2013/08/java_4061.html?view=sidebar
2. http://gandus.tistory.com/154
'Dev. Java' 카테고리의 다른 글
[자바 기본기] 상속 (0) | 2014.05.13 |
---|---|
문자열 입력과 출력 (Scanner) (0) | 2014.05.13 |
public static void main(String[] args) 의미는? (0) | 2014.05.10 |
[자바 기본기] 3. 메서드 오버로딩 (0) | 2014.05.09 |
[자바 기본기] 2. 변수와 메서드(2) (0) | 2014.05.08 |