【问题标题】:Why static blocks get executed two times while here is only one class file in this code? [closed]为什么静态块被执行两次,而这段代码中只有一个类文件? [关闭]
【发布时间】: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


【解决方案1】:

它只为FirstDup 运行一次。第二组“静态运行”语句必须来自SampleFirst 类。我敢打赌,SampleFirst 类中的构造函数、静态块和初始化块是相同的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 2016-05-11
    • 2014-08-01
    • 1970-01-01
    相关资源
    最近更新 更多