gpt4 book ai didi

java - 带扩展的初始化 block

转载 作者:行者123 更新时间:2023-11-30 04:50:51 25 4
gpt4 key购买 nike

这是我的代码片段,我对初始化 block 充满信心

class Father{
Father() {
System.out.println("Father constructor runs...");
}
static {System.out.println("static init block of Father...");}
{System.out.println("instance init block of Father...");}
}

class Child extends Father {
Child () {
System.out.println("Child constructor runs...");
}
static {System.out.println("static init block of Child ...");}
{System.out.println("instance init block of Child ...");}
public static void main (String[] argv) {
new Child();
}

}

这两个类被编译成一个类文件:Child.class我用命令行 java Child 运行它

这是我的输出:

static init block of Father...
static init block of Child ...
static init block of Child ...
instance init block of Father...
Father constructor runs...
instance init block of Child ...
Child constructor runs...

我对这个输出很满意,除了“static init block of Child ...”被打印了两次。从java文档中我读到“静态初始化 block 在类首次加载时运行一次”。

这是否意味着我的类 Child 被加载了两次?

任何帮助表示赞赏谢谢阿尔贝托

最佳答案

无法重现 - 这是我通过从命令行运行代码得到的输出:

static init block of Father...
static init block of Child ...
instance init block of Father...
Father constructor runs...
instance init block of Child ...
Child constructor runs...

你还没有说你是如何运行代码的,但我怀疑输出要么不是你想象的那样,要么你以某种奇怪的方式运行它.

您的期望是正确的:静态初始化 block 应该只运行一次。

关于java - 带扩展的初始化 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9850925/

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