programing

스태틱 클래스의 초기화는 언제 이루어집니까?

projobs 2022. 9. 22. 22:09
반응형

스태틱 클래스의 초기화는 언제 이루어집니까?

정적 필드는 언제 초기화됩니까?클래스를 인스턴스화하지 않고 스태틱필드에 접속했을 경우 프라이빗 스태틱필드를 인스턴스화하기 위해 사용되는 모든 스태틱블록과 프라이빗 스태틱메서드는 그 시점에서 (순서대로) 호출됩니까?

정적 메서드를 호출하면 어떻게 됩니까?스태틱 블록도 모두 실행됩니까?방법 전에?

일반적으로 클래스의 정적 초기화는 다음 이벤트 중 하나가 처음 발생하기 직전에 수행됩니다.

  • 클래스의 인스턴스가 생성됩니다.
  • 클래스의 정적 메서드가 호출됩니다.
  • 클래스의 정적 필드가 할당됩니다.
  • 비표준 정적 필드가 사용됩니다.
  • 최상위 클래스의 경우 클래스 내에 사전 중첩된 아사트 스테이트먼트가 실행됩니다. 1를 클릭합니다.

JLS 12.4.1」을 참조해 주세요.

또는 단축 형식을 사용하여 클래스를 강제로 초기화할 수도 있습니다(아직 초기화되지 않은 경우).


스태틱 클래스의 초기화는 언제 이루어집니까?

상기를 참조해 주세요.

정적 필드는 언제 초기화됩니까?

스태틱 클래스 초기화의 일부로서 상기를 참조해 주세요.

클래스를 인스턴스화하지 않고 스태틱필드에 접속했을 경우 프라이빗 스태틱필드를 인스턴스화하기 위해 사용되는 모든 스태틱블록과 프라이빗 스태틱메서드는 그 시점에서 (순서대로) 호출됩니까?

네. (무엇도 순간적이지 않다는 것을 모듈로)

정적 메서드를 호출하면 어떻게 됩니까?스태틱 블록도 모두 실행됩니까?방법 전에?

네, 네.


스태틱 필드의 기본 초기화 값을 확인할 수 있는 코드를 구성할 수 있습니다.


1 - Java 6에서 Java 8의 JLS에 최종 글머리글자가 표시되었지만 사양상 오류가 있었던 것 같습니다.Java 9 JLS에서 최종적으로 수정되었습니다.소스를 참조해 주세요.

스태틱 필드는 클래스 로드(로드, 링크 및 초기화)의 초기화 "단계" 중에 초기화됩니다.이 "단계"에는 스태틱필드의 초기화 및 초기화가 포함됩니다.정적 이니셜라이저는 클래스에서 정의된 텍스트 순서로 실행됩니다.

예를 들어 보겠습니다.

public class Test {

   static String sayHello()  {
      return a;
   }

   static String b = sayHello(); // a static method is called to assign value to b.
                                 // but its a has not been initialized yet.

   static String a = "hello";

   static String c = sayHello(); // assignes "hello" to variable c

    public static void main(String[] arg) throws Throwable {
         System.out.println(Test.b); // prints null
         System.out.println(Test.sayHello()); // prints "hello"
    }
}

Test.b가 인쇄됩니다.null, ''이sayHello스코프에서 변수 " " " " 는 " " 입니다.a초기화되지 않았습니다.

예, 클래스에 처음 액세스하기 전에 모든 정적 이니셜라이저가 실행됩니다.다른 방법이라면 벌레라고 부를 거예요.

언급URL : https://stackoverflow.com/questions/3499214/when-does-static-class-initialization-happen

반응형