gpt4 book ai didi

Java - 此代码中的初始化顺序是什么?

转载 作者:行者123 更新时间:2023-11-29 10:10:28 24 4
gpt4 key购买 nike

<分区>

在下面的Java代码中,Beetle类继承了Insect类。

class Insect {

private int i = 9;
protected int j;

Insect() {
System.out.println("i = " + i + ", j = " + j);
j = 39;
}
private static int x1
= printInit("static Insect.x1 initialized");

static int printInit(String s) {

System.out.println(s);
return 47;
}
}

public class Beetle extends Insect {

private int k = printInit("Beetle.k initialized");

public Beetle() {
System.out.println("k = " + k);
System.out.println("j = " + j);
}
private static int x2
= printInit("static Beetle.x2 initialized");

public static void main(String[] args) {
System.out.println("Beetle constructor");
Beetle b = new Beetle();
}
}

输出有点令人困惑。

static Insect.x1 initialized

static Beetle.x2 initialized

Beetle constructor

i = 9, j = 0

Beetle.k initialized

k = 47 j = 39

这个特定示例中的初始化顺序是什么?

为什么 x2 在 x1 之后立即初始化?以及为什么main方法的第一行(System.out.println("Beetle constructor");)在x1和x2初始化之后执行。好困惑。

我知道派生类构造函数会自动调用基类构造函数(除非它有参数并且您会使用 super 关键字)。我知道变量在构造函数之前初始化,而静态变量在其他变量之前初始化。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com