Java 输出背后的逻辑
有人能解释为什么这个代码会打印出来吗; “埃斯巴!博斯科普!巴南!基尔希!加拉!乔纳戈尔德!” 而不是印刷Java 输出背后的逻辑,java,Java,有人能解释为什么这个代码会打印出来吗; “埃斯巴!博斯科普!巴南!基尔希!加拉!乔纳戈尔德!” 而不是印刷 “Essbar!Banane!Kirsche!Boskop!Gala!Jonagold!”?首先打印静态变量,因为静态变量是在应用程序启动时创建的,而不是在代码实际开始运行时创建的 埃斯巴!博斯科普 内联初始化字段接下来被初始化,因为构造函数可能想要使用它们 埃斯巴!博斯科普!巴南!Kirsche 在构造函数初始值中,吨是最后打印的。每个construcor首先隐式地调用super,然后调
“Essbar!Banane!Kirsche!Boskop!Gala!Jonagold!”?首先打印静态变量,因为静态变量是在应用程序启动时创建的,而不是在代码实际开始运行时创建的 埃斯巴!博斯科普 内联初始化字段接下来被初始化,因为构造函数可能想要使用它们 埃斯巴!博斯科普!巴南!Kirsche 在构造函数初始值中,吨是最后打印的。每个construcor首先隐式地调用super,然后调用自己的代码。这就是为什么“Gala!”在“Jonagold”之前 埃斯巴!博斯科普!巴南!Kirsche!联欢会!乔纳戈尔德 因此,总结一下。首先打印静态变量。这些与您的主要方法完全无关。 然后创建
Apfel
构造函数。在此运行之前,将调用Frucht
构造函数。由于Frucht
构造函数可能需要Frucht.mp2
,因此会创建它并打印“Banane!”Frucht
s自己的构造函数通过打印“Kirche!”完成。现在是使用Apfel的时候了。由于它可能需要Apfel.mp2
创建它并因此打印“Gala!”。最后,Apfel
构造函数通过打印“Jonagold”完成
至于为什么“Essbar!”印在“Boskop!”之前。这一切都发生在链接阶段而不是运行阶段。类
Essbar
需要对类Frucht
可见,因为它扩展了类Frucht
,而Frucht
需要在扩展类Apfel
时对其可见。在初始化所有静态变量之前,类对其他类不可见。编辑了您的代码格式,因为使用原始格式很难理解代码流。感谢您澄清:)
public class three {
public static void main(String[] args) {
Apfel a = new Apfel();
}
}
class Apfel extends Frucht {
static Print mp = new Print("Boskop!");
Print mp2 = new Print("Gala!");
public Apfel() {
System.out.print("Jonagold!");
}
}
class Frucht extends Essbar {
Print mp2 = new Print("Banane!");
public Frucht() {
System.out.print("Kirsche!");
}
}
class Essbar {
static Print mp = new Print("Essbar!");
}
class Print {
public Print(String msg) {
System.out.print(msg);
}
}