클래스 필드의 초기화만을 담당하는 중괄호로 둘러싸인 블록
생성자보다 먼저 호출되며, static 키워드의 유무에 따라 구분됨
인스턴스 블록 ( { } )
: 인스턴스 변수를 초기화 시키는 블록 (인스턴스가 생성될 때마다 실행)
클래스(static) 블록 ( static{ } )
: static 필드를 초기화 시키는 블록 (프로그램이 시작될 때 한 번만 실행)
⭐ 인스턴스 블록은 생성자와 차이가 거의 없어 잘 사용되지 않지만, 여러 개의 생성자에서 공통으로 수행되어야 하는 코드가 있을 때 인스턴스 블록에 포함하면 코드의 중복을 제거함으로써 신뢰도를 높이고, 오류의 발생 가능성을 줄일 수 있다.
클래스 변수
JVM 기본값 ➡ 명시적 초기값 ➡ 클래스 초기화 블록 초기값
인스턴스 변수
JVM 기본값 ➡ 명시적 초기값 ➡ 인스턴스 초기화 블록 초기값 ➡ 생성자를 통한 초기값
🌼 JVM(Java Virtual Machine) : 자바 가상 머신
package kh.oop1.day03.exam;
public class BlockExam {
public static String name = "홍길동";
public BlockExam() {
System.out.println("생성자 영역");
}
int age = 19;
static {
System.out.println("static block 영역");
name = "박길동";
}
{
System.out.println(age);
System.out.println("인스턴스 블록1");
this.age = 22;
System.out.println(age);
}
{
System.out.println("인스턴스 블록2");
}
}
package kh.oop1.day03.run;
import kh.oop1.day03.exam.BlockExam;
public class Run {
public static void main(String[] args) {
BlockExam be = new BlockExam();
System.out.println(be.name);
}
}
static block 영역
19
인스턴스 블록1
22
인스턴스 블록2
생성자 영역
박길동