2014-10-12 30 views
0

为什么当我不为该类的对象(匿名)创建引用变量时,类中的静态块不会被执行?静态块在匿名对象的情况下不会被执行

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

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 
+0

如果你还没有这样做,请阅读一下静态块。另外,尝试运行相同的代码,但用引用的代码替换匿名对象。然后,它会变得清晰。答案在于你的代码本身。 – 2014-10-12 05:34:19

+0

@BoratSagdiyev如下面的答案所示,被引用或匿名的对象与正在执行的静态块无关。每当该类首次加载时,它将被执行一次。 – UrsinusTheStrong 2014-10-12 06:15:30

+1

这正是我的观点。即使您使用非匿名对象,您的输出也是一样的。所以,你可以自己得到答案,而不必在这里问。但是,总是感到欢迎问。 – 2014-10-12 06:20:56

回答

5

一个static初始化块只运行一次,当班级是loaded and initialized

另外,static方法与任何实例都没有任何关系。做

new StaticDemo().display(); 

是毫无意义和不清楚。

+0

是的,你写的,静态块只能执行一次。通过在代码中仅保留“new StaticDemo()。display();”,静态块确实得到执行。 – UrsinusTheStrong 2014-10-12 05:58:22

相关问题