2012-04-18 8 views
0

머리에 올바른 자바 초기화 메커니즘 모델이 있는지 확실하지 않습니다. 각 클래스는 다음 다음 : 그 값이정적 멤버가있는 java 초기화 순서

  1. 정적 초기화 및 인스턴스 변수 : 하나
  2. 가 자신에게 초기화가 존재하는 경우

    1. 는 슈퍼 클래스를 초기화를

    초기화는 다음과 다음 이니셜 라이저 외부에 설정하십시오.

  3. 실행 정적 초기화 블록
  4. 실행 생성자 블록

는 정밀/정확합니까?

+1

개체를 초기화하고 클래스를로드하는 데 차이가 있습니다. 정적 멤버는 클래스가로드 될 때 초기화되고 비 정적 멤버는 객체가 만들어 질 때 초기화됩니다. – scravy

+0

"초기화"라고하는 것에주의하십시오 – UmNyobe

+0

아마도 http://stackoverflow.com/questions/3499214/java-static-class-initialization의 복제본 –

답변

1

코드는 다음과 같이 실행 -

정적 초기화 블록을 한 번 실행, 클래스가 처음로드 될 때.

모든 슈퍼 생성자

변수 정적.

인스턴스 초기화 블록은 생성자가 super()를 호출 한 후 실행됩니다.

인스턴스 변수.

(초기화 블록은 나타나는 순서대로 실행됩니다.)

+1

정적 init 블록이 정적 변수보다 먼저 실행된다는 보장은 없습니다. 실제로 많은 정적 변수 (최종적이며 컴파일 타임 상수 표현식을 가진 정적 변수)는 정적 초기화 블록 앞에 할당됩니다. – henko

1

Java language specification에 따르면 가정은 다소 정확합니다. 도하기 전에로드 된 클래스가 초기화 된 후 클래스 (함께 생성자를) 구성 할 때

  1. 인스턴스 변수는, 컴파일 시간 상수 식에
  2. 최종 정적 변수를 실행 : 예외는 점이다 수퍼 클래스를로드하고
  3. 정적 초기화 블록은 정적 변수와 함께 하나의 블록으로 코드에 표시된 순서대로 실행됩니다.
+0

그냥 단락 1을 기대한다고 적어 두었습니다 –

+0

그것도 기대합니다, 나는 방금 정적 변수와 인스턴스 변수가 클래스 생성 전에 함께 초기화된다고 가정합니다. – henko