【问题标题】:Initializer block not executing [duplicate]初始化程序块未执行[重复]
【发布时间】:2017-01-01 23:18:00
【问题描述】:

在下面的代码中,为什么没有调用初始化程序块?但是如果 main() 被从这个类中移除并且当它从另一个类中加载时,初始化块就会执行。

public class AAStatic {
static String s = "a";

{
    System.out.println("hi");
    m1();
}
public static void main(String[] args) {
    m1();
    System.out.println(s);
}

static{
    m1();
}
static void m1(){
    s+="b";
}
}

【问题讨论】:

  • 会在{ 帮助之前添加static 吗?
  • 实例初始化块?您在哪里创建实例?

标签: java


【解决方案1】:

因为您没有创建任何AAStatic 类的实例。 Initializer 块在构造函数代码之前执行(即使你不写显式构造函数隐式生成构造函数)。

您可以将static 添加到您的初始化程序中,然后它将在加载类时执行。

【讨论】:

    【解决方案2】:

    有两种类型的初始化块。

    statcStatic Initialization Blocks

    static{
       m1();
    }
    

    所以它会在你第一次使用那个类时被调用,这样它就可以用来初始化你的类。

    没有static的是初始化实例。因此,您不创建任何AAStatic 实例将不会调用该块。试试:

    public static void main(String[] args) {
        new AAStatic();//new instance here
        m1();
        System.out.println(s);
    }
    

    参考:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-05
      相关资源
      最近更新 更多