每次调用静态方法时是否创建了一个新对象(在辅助类中)?

时间:2017-05-15 19:46:48

标签: java class

一般的问题是,如果在 A类中创建了一个(全局)对象,则每次静态方法创建时都会在 A类中创建一个新对象。由另一个类调用?

我的猜测是肯定的,因为声明本身会创建对象,但我无法找到有关此特定情况的任何澄清(可能是因为这是一个愚蠢的问题)。

public class Helper {
      private static Object x = new Object();

      public static void method1(){
            //uses x
      }

      public static void method2(){
            //uses x
      }

}

使用Helper的主要类

public class Main{

     public static void main(String[] args){
           Helper.method1();
           Helper.method2();
     }
}

在上面的示例中,由于这些调用,是否创建了2个对象? (不询问是否创建了2个Helper对象)

我可能会重新考虑辅助类的设计,但这使我想要得到最初问题的答案。

非常感谢任何澄清!

2 个答案:

答案 0 :(得分:1)

来自JLS 8.3.1.1

  

如果一个字段被声明为静态,则无论该类最终可以创建多少个实例(可能为零),都存在字段的一个实体。初始化类(§12.4)时,会生成静态字段(有时称为类变量)。

因此,对象只创建一次,因为static字段只创建​​一次。

答案 1 :(得分:-1)

流程如下(简化):

  1. Main类已加载
  2. 为Main调用静态初始化,但无需执行任何操作
  3. Main.main()方法称为
  4. Helper类已加载
  5. 为Helper调用静态初始化,因此调用x = new Object()
  6. Helper.method1()被称为
  7. Helper.method2()被称为