Static block & Static variable : 정적 변수 및 정적 블록은 클래스에 나타나는 순서대로 먼저 초기화됩니다. static 변수와 블록은 클래스가 JVM(Java Virtual Machine)에 로드될 때 한 번만 초기화됩니다.
Instance variable & Instance initializer blocks: 인스턴스 변수 및 인스턴스 초기화 블록은 클래스에 나타나는 순서대로 다음에 초기화됩니다. 새 객체가 생성될 때마다 초기화됩니다.
Constructors: 마지막으로 클래스의 생성자가 실행됩니다. 생성자는 객체의 상태를 초기화하는 데 사용되며 클래스의 새 인스턴스가 생성될 때마다 호출됩니다. 클래스에 여러 생성자가 있는 경우 호출되는 특정 생성자는 객체 생성 중에 전달된 매개 변수에 따라 다릅니다.
class Example {
static int staticVar = print("Static variable initialized");
static {
print("Static block executed");
}
int instanceVar = print("Instance variable initialized");
{
print("Instance initializer block executed");
}
Example() {
print("Constructor executed");
}
public static int print(String message) {
System.out.println(message);
return 0;
}
public static void main(String[] args) {
Example obj1 = new Example();
Example obj2 = new Example();
}
}
Static variable initialized
Static block executed //static 영역은 시작하자마자 가장 먼저 초기화
Instance variable initialized // obj1을 생성 -> Instance초기화 후 생성자 초기화
Instance initializer block executed
Constructor executed
Instance variable initialized // obj2를 생성 -> Instance초기화 후 생성자 초기화.
Instance initializer block executed
Constructor executed
Static은 로드 될 때 가장 먼저 메모리에 올라가 초기화 된 뒤 더이상 나타나지 않는 걸 볼 수 있다. 이후 new Example()을 통해 객체를 생성할 때 Instance가 먼저 초기화 된 뒤 생성자가 초기화 되는 것을 볼 수 있다.
이렇듯 코드로 확인 할 수 있는 작업은 코드로 직접 확인 해 보는것이 가장 좋은거 같다.