【发布时间】:2023-03-13 03:50:01
【问题描述】:
仅供参考 - 这里只有一个类文件 FirstDup。 问题- 正如我们所知,当类在 JVM 中加载时,静态块只会执行一次。所以我的意思是..当我通过给出命令“java FirstDup”开始执行类时,类正在加载,然后立即执行静态块。但此后,当控制权进入“public static void main()”以创建第一个对象 s1 时,为什么在给出“java FirstDup”命令后已经加载类时再次执行静态块?如果我说错了,请帮助我并纠正我。
public class FirstDup {
public FirstDup() {
System.out.println("Constructor running");
}
{
System.out.println("1st Non-static running");
}
{
System.out.println("2nd non-static running");
}
static{
System.out.println("1st static running");
}
static{
System.out.println("2nd static running");
}
public static void main(String[] args) {
System.out.println("Main method running");
SampleFirst s1 = new SampleFirst();
SampleFirst s2 = new SampleFirst();
}
}
....... 输出
1st static running
2nd static running
Main method running
1st static running
2nd static running
1st Non-static running
2nd non-static running
Constructor running
1st Non-static running
2nd non-static running
Constructor running
【问题讨论】:
-
我无法重现这种行为,尽管我不得不对您的示例进行一些更改,特别是将
SampleFirst更改为FirstDup。所以如果你得到你说的输出,那么问题出在SampleFirst(如果那是一个真正的类的话)。 -
我假设您在
SampleFirst类中的静态块与您在FirstDup类中的静态块相同?
标签: java static-block