변수를 선언하고 처음으로 값을 저장하는 것을 변수의 초기화라 함
멤버변수( 클래스변수, 인스턴스 변수 ): 초기화하지 않아도 컴파일러가 자동으로 변수 자료형 기본값으로 초기화해줌 지역변수: 사용하기 전에 반드시 초기화 필요
class InitTest {
int x; // 인스턴스 변수
int y = x; // int 의 기본값인 0으로 y도 초기화됨
void method1() {
int i; // 지연변수, 선언만하고 초기화 안한 상태
int j = i;// 컴파일 에러, 지역변수 초기화하지 않고 사용
지역변수와 달리 멤버변수의 초기화 방법은 여러개가 있음
멤버변수 초기화 방법
class Car {
int door = 4; // 기본형 변수의 초기화
Engine e = new Engine(); // 참조형 변수의 초기화
...
}
클래스 초기화 블럭
인스턴스 초기화 블럭
class Example {
static { /* 클래스 초기화블럭 */ }
{ /* 인스턴스 초기화 블럭 */ }
}
package chap06_OOP1.initialization;
class BlockTest {
static {
System.out.println("클래스 초기화 블럭"); // 클래스 초기화 블럭(static)
} // 클래스가 메모리에 처음 로딩될 때 한 번만 수행
{
System.out.println("인스턴스 블럭"); // 인스턴스 초기화 블럭, 인스턴스 생성될 때 마다 수행됨
} // 클래스의 모든 생성자에서 공통으로 수행하는 문장이 있을 때,
// 각 생성자별로 쓰면 중복됨으로 인스턴스 블록에 넣으면 코드가 간결해짐
public BlockTest() {
System.out.println("생성자"); // 생성자 수행
}
public static void main(String args[]) {
System.out.println("BlockTest bt = new BlockTest(); 구문 실행시 인스턴스 초기화 블럭과 생성자 실행됨");
BlockTest bt = new BlockTest();
System.out.println("BlockTest bt2 = new BlockTest(); 구문 실행시 인스턴스 초기화 블럭과 생성자 실행됨");
BlockTest bt2 = new BlockTest();
}
}
// 출력
클래스 초기화 블럭
BlockTest bt = new BlockTest(); 구문 실행시 인스턴스 초기화 블럭과 생성자 실행됨
인스턴스 블럭
생성자
BlockTest bt2 = new BlockTest(); 구문 실행시 인스턴스 초기화 블럭과 생성자 실행됨
인스턴스 블럭
생성자