【问题标题】:JAVA How Many times Static Block is Executed? [duplicate]JAVA静态块执行多少次? [复制]
【发布时间】:2016-10-10 11:35:39
【问题描述】:

我对它在 Java 中的静态块如何工作表示怀疑。据我了解,每次JVM加载类时都会执行静态块内的代码。我不明白的是何时加载一个类。

例如,假设我在 MyObject 类中有静态块,然后在另一个类中我有这个代码:

MyObject o1= new MyObject();
MyObject o2= new MyObject();

这种情况下静态块执行了多少次?

【问题讨论】:

  • 问题是什么?何时加载类或静态块执行多少次?
  • @seal - 我问了两个问题
  • 一个类只加载一次,第一次需要加载。 JVM 何时执行此操作取决于 JVM 实现。
  • @PeterLawrey - .... 除非你有类加载器树。
  • 嗯。这取决于你如何“闭嘴”。另一种说法是该类被多次加载,每次加载时都会得到不同的类型(以及不同的Class 对象)。

标签: java static jvm block


【解决方案1】:

静态块内的代码在JVM第一次加载类时执行。

如果再次加载,则静态块将不会执行。您可以使用 Class.forName("class") 方法显式加载类来执行您的静态块。

在你的情况下,

MyObject o1= new MyObject();
MyObject o2= new MyObject();

当您第一次创建对象时,您的静态块将执行。再次创建另一个对象,它不会执行。它们共享相同的数据副本。

【讨论】:

  • “JVM 第一次加载类时” - 那是多少次? :-)
  • 仅限第一次。
  • JVM 第一次加载类的每次是什么? “第一次”加载一个类的频率是多少? “如果你再次加载”是什么意思?你怎么看,你可以多久加载一次课程?
  • 这意味着如果你想重新加载你的课程。
  • 没有。不清楚。不止一次“第一次”发生的事情是一个逻辑矛盾。逻辑矛盾永远不清楚。
猜你喜欢
  • 1970-01-01
  • 2014-06-05
  • 2022-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
相关资源
最近更新 更多