Ich weiß, dass die neue, dup, invokespecial und astore Bytecode Muster die Instanz initializer Methode aufrufen wird <init>
, wenn jemand beispielsweise eine Java-Klasse aus der Sicht der Java-Sprache, aber ich, die nie herausfinden Rufen Sie die spezielle Methode <clinit>
auf und wann passiert das?Wer ruft die Klasseninitialisierungsmethode <clinit> auf und wann?
Meine Schätzung ist, dass <clinit>
aufgerufen wird vor<init>
Methode. Kann irgendein Körper mir einige Informationen geben, um es zu beweisen? Ist dies in der JVM-Spezifikation oder der Java-Sprachspezifikation dokumentiert?
"Beachten Sie, dass nur hinzugefügt wird, wenn eine Klasse statische Initialisierung benötigt" - jede Quelle dafür? –
siledh
es ist aus der Praxis (Tests) um ehrlich zu sein, auch der gesunde Menschenverstand schlägt das gleiche, sicher Theres einen Absatz in JLS darüber –