멤버변수를 초기화 하는 방법은 크게 3가지로 나뉜다.
- 명시적 초기화
- 간단 초기화의 경우 사용.
- 기본형 변수의 초기화
- int door = 4;
- 참조형 변수의 초기화
- Engine e = new Engine();
- 초기화 블럭
- 주로 복잡한 클래스 변수 초기화 하는데 사용
- 인스턴스변수 초기화 블럭: { }. -> 사용 잘 x
- 클랙스변수 초기화 블럭 : static { }
- 생성자
- 복잡한 초기화를 하는 경우 사용
- 인스턴스 변수를 초기화 하는데 사용된다.
public class VariableInitalize {
public static void main(String[] args) {
// static 변수(클래스변수)의 초기화 테스트
System.out.println(Arrays.toString(StaticBlockTest.arr));
// instance 변수의 초기화 테스트
ConstructorTest ct = new ConstructorTest();
System.out.println(ct.instanceVariable);
}
}
// static 변수의 복잡한 초기화: static { }
class StaticBlockTest {
static int[] arr = new int[10]; // 참조형 변수의 명시적 초기화
// 클래스변수 초기화 블럭
static {
for(int i=0; i<arr.length; i++) {
arr[i] = (int)(Math.random()*10) +1;
}
}
}
// instance 변수의 복잡한 초기화 : 생성자
class ConstructorTest {
int instanceVariable = 0; // 기본형 변수의 명시적 초기화 -> 사실 멤버변수는 명시적 초기화를 안해도 자동초기화 된다.
ConstructorTest() {
this.instanceVariable = 100;
}
}
위 코드를 통해 쉽게 설명하자면,
- 우선은 간단하게 초기화할 수 있는 내용은 명시적 초기화를 사용하면 쉽다.
- 이 외에, 복잡한 초기화를 진행해야 할 때는,
- 클래스 변수(static)를 초기화 할 때는 static { }
- 인스턴스 변수를 초기화 할 때는 생성자
를 사용하면 된다.
(참고)
초기화 순서 클래스변수 -> 인스턴스변수
초기화 되는 시점은 당연히,
클래스가 메모리에 올라갈 때, 클래스변수가 먼저 초기화가 진행된다. (자동 초기화(기본값) -> static 명시적 초기화 -> static {})순으로!
다음으로, 객체가 생성될 때마다 인스턴스 변수가 초기화된다.(자동 초기화(기본값) -> 명시적 초기화 -> 생성자 )
'JAVA' 카테고리의 다른 글
15. 오버라이딩 (0) | 2022.10.02 |
---|---|
14. 상속과 포함 (0) | 2022.10.02 |
12. this()와 this (0) | 2022.09.24 |
12. 생성자, 기본 생성자 (0) | 2022.09.24 |
11. static 메서드와 instance 메서드 (0) | 2022.09.20 |