변수의 초기화
변수의 초기화
class InitTest {
int x; // iv
int y = x; // iv
void method1() {
int i;
int j = i; // ERROR:lv를 초기화하지 않고 사용
}
}
- 지역 변수는 수동 초기화 해야한다.
- 멤버 변수(iv, cv)는 자동 초기화 된다.
지역 변수는 메서드가 호출되어 작업하는 동안만 존재하기 때문에 생명주기가 짧다.
메서드는 빨리 실행하고 제거해야 하기 때문에 지역 변수를 항상 0으로 초기화하면 성능이 떨어진다.
멤버 변수는 자동 초기화 안하면 사용자가 초기화 해야 할 것이 많아지기 때문이다.
멤버 변수의 초기화
- 명시적 초기화 (=)
int door = 4; // primitive type 변수의 초기화
Engine e = new Engine(); // reference type 변수의 초기화
- 초기화 블럭
- 인스턴스 초기화 블럭 : { }, iv
- 클래스 초기화 블럭 : static { }, cv
- 생성자
iv 초기화
class StaticBlockTest {
static int[] arr = new int[10]; // 명시적 초기화
static {
for (int i = 0; i < arr.length; i++) { // 복잡 초기화
arr[i] = (int) (Math.random() * 10) + 1;
}
}
}
class InitTest {
// 간단 초기화
// 명시적 초기화
static int cv = 1;
int iv = 1;
// 복잡 초기화
static { cv = 2; } // 클래스 초기화 블럭
{ iv = 2; } // 인스턴스 초기화 블럭
InitTest() { // 생성자
iv = 3;
}
}
- 클래스 변수 초기화 시점 : 클래스가 처음 메모리에 로딩될 때 단 한번
- 인스턴스 변수 초기화 시점 : 인스턴스가 생성될 때마다
결론
- CV → IV 순으로 초기화
- 자동 → 간단 → 복잡 초기화
Author And Source
이 문제에 관하여(변수의 초기화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@solda/변수의-초기화
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Author And Source
이 문제에 관하여(변수의 초기화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@solda/변수의-초기화저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)