Java 在匿名对象的情况下,不会执行静态块

Java 在匿名对象的情况下,不会执行静态块,java,static,Java,Static,当我没有为该类的对象(匿名)创建引用变量时,为什么不执行该类中的静态块 例如,让我们考虑一下这个简单的类: public class StaticDemo { private static int x; public static void display(){ System.out.println("Static Method: x = "+x); } static { System.out.println("Static

当我没有为该类的对象(匿名)创建引用变量时,为什么不执行该类中的静态块

例如,让我们考虑一下这个简单的类:

public class StaticDemo {

    private static int x;

    public static void display(){
        System.out.println("Static Method: x = "+x);
    }

    static {
        System.out.println("Static Block inside class");
    }

    public StaticDemo(){
        System.out.println("Object created.");
    }

}
另一个使用它的类:

public class UseStaticDemo {
    public static void main(String[] args) {
        StaticDemo Obj = new StaticDemo();
        Obj.display();

        System.out.println("------------");

        new StaticDemo().display();
    }
}
输出:

Static Block inside class
Object created.
Static Method: x = 0
------------
Object created.
Static Method: x = 0

当类被激活时,
静态
初始值设定项块只运行一次

而且,
静态
方法与任何实例都绝对没有关系。做

new StaticDemo().display();

无意义且不清楚。

当类被激活时,静态初始化程序块只运行一次

而且,
静态
方法与任何实例都绝对没有关系。做

new StaticDemo().display();

没有意义,也不清楚。

如果您还没有阅读过一些关于静态块的内容,请阅读。另外,尝试运行相同的代码,但用引用的对象替换anon对象。然后,它就会变得清晰。答案在于代码本身。@BoratSagdiyev如下面的答案所示,被引用或匿名的对象与正在执行的静态块无关。每当第一次加载类时,它都会执行一次。这正是我的观点。即使使用非anon对象,输出也会相同。所以,你可以自己得到答案,不用在这里问。但是,总是欢迎你问。@BoratSagdiyev我现在觉得自己像个白痴。在发布此问题之前,我应该尝试一下-(不,你不必觉得自己像个白痴。我不是故意这么说的。我们大多数人都是学习者,我也是。所以,没关系。重点是,你应该放松,自己尽可能多地尝试。然后,来这里。不要太怀疑自己,也不要对自己太苛刻。振作起来,继续编码。Chenqui。如果你需要,请阅读一些关于静态块的内容还没有这样做。另外,尝试运行相同的代码,但将anon对象替换为引用的对象。然后,它将变得清晰。答案在于代码本身。@BoratSagdiyev如下面的答案所示,被引用或匿名的对象与正在执行的静态块无关。它将在任何时候执行一次r类是第一次加载的。这正是我的观点。即使使用非anon对象,您的输出也将是相同的。因此,您可以自己得到答案,而无需在此处提问。但是,随时欢迎提问。@BoratSagdiyev我现在觉得自己像个白痴。我应该在发布此问题之前尝试一下-(不,你不必觉得自己像个白痴。我不是故意这么说的。我们大多数人都是学习者,我也是。所以,没关系。重点是,你应该放松,自己尽可能多地尝试。然后,过来。不要太怀疑自己,也不要对自己太苛刻。振作起来,继续编码。Chenqui。是的,你在写。静态块只会执行一次。通过在代码中只保留“new StaticDemo().display();”,静态块确实执行了。我的错。是的,您正在编写。静态块将只执行一次。通过在代码中只保留“new StaticDemo().display();”,静态块确实执行了。我的错。