클래스 인스턴스가로드/생성되는 동안 실행되며 클래스의 멤버 속성을 초기화하는 데 사용되는 초기화 프로그램 블록입니다 (Java http://download.oracle.com/javase/tutorial/java/javaOO/initial.html 참조). 원하는만큼의 블록을 가질 수 있으며 위에서 아래로 인스턴스화됩니다.
인스턴스 블록 외에도 원하는만큼 정적 블록을 포함하여 정적 멤버를 초기화 할 수 있습니다. 다음으로 선언 할 것이다 : 클래스가 초기화되고
public class Initialization {
static int b = 10;
int a = 5;
static {
b = -9;
}
{
a += 2;
}
public static void main(String[] args) throws Exception {
System.out.println(ClientVoting.b);
System.out.println(new ClientVoting().a);
System.out.println(ClientVoting.b);
System.out.println(new ClientVoting().a);
}
static {
b = 1;
}
{
a++;
}
}
동안 고정 부재 "B"는 10으로 초기화되고, 다음 제 정적 범위는 -13 그 값을 변경 한 후 1 이에 클래스가로드되는 동안 한 번만 실행됩니다. 이 메소드는 main 메소드의 첫 번째 라인을 초기화하기 전에 실행됩니다.
한편, 클래스와 비슷한 예제는 인스턴스 참조 "a"입니다. A는 5로 초기화 된 다음 인스턴스 블록은 7로, 마지막 블록은 8로 업데이트됩니다. 예상대로 정적 멤버는이 코드에서 한 번만 초기화되는 반면 인스턴스 블록은 새 인스턴스를 만들 때마다 실행됩니다.
이 예제 출력은 1~8 1~8
도 참조 [8.6 인스턴스 이니셜 (http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.6 인). – trashgod
스티븐, 주제 때문에 중복이 될 수 있지만 완전히 다른 방식으로 이것을 받았습니다 – nairdaen
다른 사람들이 지적했듯이 유효합니다. 그러나 Java 인증을받은 후에는 평생 동안 프로그래밍 할 수 있습니다. 제발, 일상적인 작업에이 구조를 사용하지 마십시오. 부디. 자바 인증이 싫어. 그것은 당신에게 모든 종류의 혼란스럽고 복잡하고 때로는 가벼운 방법을 당신의 동료를 혼동시키고 버그를 소개하는 방법을 가르쳐줍니다. – rfeak