2012-03-12 3 views
2

사용 java reflection 모든 클래스는 리플렉션 대상이 될 때 정적 생성자를 실행하는 것으로 나타났습니다. 이 정적 생성자를 반환하거나 전혀 실행하지 않을 수있는 방법이 있습니까?Java 정적 초기화 도구 및 반사

+1

내 추측은이 질문에 없습니다. 단지 SO의 집계 된 지식을 확인하십시오 – fmsf

답변

7

아니요. 정적 초기화 프로그램은 클래스가 클래스 로더에 의해로드되고 초기화되는 즉시 호출됩니다.

반사는 초기화하지 않는 클래스를로드하는 클래스를 초기화 할 수 있습니다), 나는 Bozho 답변 지금 너무 짧은 것을 생각하기 때문에

+0

JDK5 장 12.4에 대한 JLS 상태가 다르게 적용되지 않습니까? 클래스가 초기화되면 정적 이니셜 라이저가 호출됩니다. 클래스를로드하고 초기화하지는 않습니다. – blackdrag

+0

아, 맞아. 문구를 고쳐야 겠어. 어쨌든, 반사를 사용하여 둘 다 :) – Bozho

0

나는, 내 대답을 추가 할 수 있습니다. 예를 들어 정적 필드에서 값을 요청하면 실제 값을 가져 오기 전에 정적 초기화 프로그램이 호출되었는지 확인할 수 있습니다. Field를 얻는 것만이 일반적으로하지 않습니다. 반사 코드로 인해 정적 초기화 프로그램이 실행되고 실제로 이와 같이 수행해야하는 경우 해당 초기화 프로그램이 호출되는 것을 방지 할 수있는 방법이 없습니다. 그들이 전화하는 것을 피하려면 Reflection을 통해하는 일을 바꿔야합니다.

관련 문제