问答详情
源自:8-10 Java 中的 static 使用之静态初始化块

创建对象的意思

不是很理解“由于静态初始化块只在类加载时执行一次,所以当再次创建对象时并未执行静态初始化块”。

是指在再次创建对象时,除静态初始化块都要再被执行一次吗?

提问者:打坐_参禅 2016-08-22 15:58

个回答

  • M__
    2016-08-27 09:58:45

    再次创建对象时,由于再次加载了类,所以类下的代码块都要再次执行一遍,而静态代码块只能执行一次所以这时候就不执行了。

  • 慕粉3848213
    2016-08-22 16:20:33

    是的。

    看代码:

    public class StaticCodeTest {
       static String nation;
       String name;
       static {
           nation = "China";
           System.out.println("静态代码块执行了");
       }

       {
           System.out.println("代码块执行了");
       }

       public StaticCodeTest(String name){
           this.name = name;
           System.out.println("构造方法执行了");
       }
       public static void main(String[] args){
           StaticCodeTest code = new StaticCodeTest("jeomre");
           new StaticCodeTest("hihi");
       }
    }


    执行结果:

    静态代码块执行了

    代码块执行了

    构造方法执行了

    代码块执行了

    构造方法执行了


    分析:

    在 main() 方法中,初始化了 2 个对象,可以查看到第二个对象初始化的时候,已经不执行静态代码块了,因为静态代码块的语句没有打印出来。这是因为在初始化第一个对象的时候,已经执行过了静态代码块了,可以看执行结果。