Was bedeutet es, wenn wir sagen, ein class
ist "geladen"?Wann sagen wir, dass die Klasse in Java geladen ist?
Zum Beispiel wird gesagt, dass Static init
Blöcke zum Zeitpunkt des Ladens der Klasse ausgeführt werden. Wann genau ist class
geladen?
Bitte beachten Sie diesen Code von Kathy Sierra Buch:
class Bird {
{
System.out.print("b1 ");
}
public Bird() {
System.out.print("b2 ");
}
}
class Raptor extends Bird {
static {
System.out.print("r1 ");
}
public Raptor() {
System.out.print("r2 ");
}
{
System.out.print("r3 ");
}
static {
System.out.print("r4 ");
}
}
class Hawk extends Raptor {
public static void main(String[] args) {
System.out.print("pre "); //1
new Hawk();//2
System.out.println("hawk ");
}
}
Der Ausgang des obigen Code ist: r1 r4 pre b1 b2 r3 r2 Habicht
Ich kann nicht howcome pre verstehen gedruckt wird nach r1. Welcher Teil des Codes wurde in die Raptor-Klasse geladen?
Einer der Antwort sagt:
„die Klasse im allerletzten Moment initialisiert wird, aber bevor eines seiner Mitglieder zugegriffen wird“.
Aber durch diese Logik, sollte nicht VOR r1 gedruckt werden? Seit Zeile 2 greift Konstruktor der Klasse Raptor NACH der Ausführung von line1.
Kommt das nicht auf Ihre Definition von "geladen"? – byxor
Eine Klasse wird geladen, wenn Sie einen Verweis auf diese Klasse haben können. Die Initialisierung ist ein späterer Schritt, der oft zusammen durchgeführt wird, aber nicht unbedingt sein muss. –
@PeterLawrey Tritt dies vor dem Beginn der Ausführung der Methode main() auf? – SKG