더 명확한 예제를 표현하자 :
public class Test {
static {
System.out.println("static initializer");
}
{
System.out.println("instance initializer");
}
public Test() {
System.out.println("constructor");
}
}
다음과 같이 테스트 :
public class Main {
public static void main(String[] args) {
Test test1 = new Test();
Test test2 = new Test();
}
}
출력 : 정적 초기화는 한 번 실행됩니다
static initializer
instance initializer
constructor
instance initializer
constructor
런타임 동안, 특히 클래스를로드하는 동안 인스턴스 이니셜 라이저는 생성자 이전의 모든 인스턴스화 중에 실행됩니다.
두 개 이상 가질 수 있으며 코딩에 표시된 순서대로 실행됩니다.
인스턴스 이니셜 라이저의 주요 장점은 사용하는 생성자에 관계없이 실행된다는 것입니다. 그것들은 각각에 공통적 인 초기화를 복제 할 필요가 없도록 각각에 적용됩니다.
정적 초기화 프로그램의 주요 이점은 클래스로드 중에 한 번만 실행된다는 것입니다. 잘 알려진 실세계의 예는 JDBC 드라이버입니다. 당신은 단지 static
초기화를 실행
Class.forName("com.example.jdbc.Driver");
을 수행 할 때
static {
DriverManager.registerDriver(new com.example.jdbc.Driver());
}
이 식으로 DriverManager
는 동안 올바른 JDBC 드라이버를 찾을 수를 다음과 같이 다음 어떤 (괜찮은) JDBC 드라이버는 DriverManager
에 자신을 등록합니다 getConnection()
.
정적 키워드는 선택 사항입니까? – blackanchorage
그래서 위의 코드에서 정적 블록을 만들면 먼저 정적 블록이나 정적 이니셜 라이저 블록이 실행됩니까? ... ... 정적 초기화자를 설명 할 수 있습니까? – Hariharbalaji
확실히 '정적'초기화 프로그램이 아닙니다. – BalusC