Ich habe den folgenden Code geschrieben und ein Objekt für die Superklasse erstellt.Warum wird der statische Code der Subklasse ausgeführt?
class SuperClass{
static int a=2;
static int b(){
return 2;
}
int c(){
return 2;
}
SuperClass(){
System.out.println("Super");
}
static {
System.out.println("super");
}
}
public class Sub extends SuperClass{
Sub(){
System.out.println("Sub");
}
static {
System.out.println("sub");
}
static int b(){
return 3;
}
int c(){
return 3;
}
public static void main(String ax[]){
SuperClass f =new SuperClass();
System.out.println(f.c());
System.out.print(SuperClass.b());
}
}
Wenn ich die Ausgabe geprüft, es ist wie folgt:
super
sub
Super
2
2
Ich weiß, dass statischer Block nur dann ausgeführt wird, wenn das Objekt der Klasse initialisiert wird, oder ein statischer Bezug genommen wird. Aber hier habe ich keine der Sub-Klassen gemacht. Warum sehe ich dann "sub", d. h. die statische Blockausgabe der Unterklasse?
Das Ausführen der 'main'-Methode (die in der 'Sub'-Klasse verschachtelt ist) ist eine statische Referenz. :) –
@KonstantinYovkov Ich dachte darüber nach, aber selbst dann "sub" sollte zuerst richtig kommen. Dieser Zweifel wird nun aus Bathshebas Antwort geklärt, da statische Blöcke in der Reihenfolge Super- und Unterklassen ausgeführt werden. Vielen Dank. – AV94
@anil nicht zuerst, die 'Sub'-Klasse hängt immer noch von der' Super'-Klasse ab, die daher zuerst ausgeführt wird. – njzk2