java - 为什么静态块被执行两次,而这段代码中只有一个类文件?
问题描述
仅供参考 - 这里只有一个类文件 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
解决方案
它只运行一次FirstDup
。第二组“静态运行”语句必须来自SampleFirst
类。我敢打赌,你在类中有相同的构造函数、静态块和初始化块SampleFirst
。
推荐阅读
- typescript - 表达没有一千个选项的对象状态,同时避免“从不”问题
- javascript - 如何从 octokit api 获得更多结果?
- amazon-web-services - 如何将分片重新分配到单个 Elasticsearch 索引的所有可用节点
- autodesk-forge - 为什么将新模型上传到 BIM 360 docs 后 GetManifest 的翻译状态卡在 90%
- azure - 延迟直到 Azure 逻辑应用程序中的函数抛出错误
- javascript - 错误:spawn vlc ENOENT - 无法使用 nodejs 打开 vlc
- java - Primefaces 10 主题 Avalon 3.0.0 ClassNotFoundException org.primefaces.avalon.component.AvalonMenuRenderer
- macos - 在 MacOS 上使用共享库 dylib 构建和安装 BZip2
- java - 如何更改tomcat 9中的信任库
- javascript - FullCalendar 事件的问题...从数据库带来的事件与使用 addEvent 添加的事件发生冲突