首页 > 解决方案 > 为什么静态块被执行两次,而这段代码中只有一个类文件?

问题描述

仅供参考 - 这里只有一个类文件 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

标签: javastatic-block

解决方案


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


推荐阅读