谁初始化java中的接口变量?

时间:2017-12-18 10:25:22

标签: java

由于Interface中没有构造函数,谁在java中初始化接口的变量?

2 个答案:

答案 0 :(得分:3)

Java使用interfaces的隐式修饰符。所以界面:

 public interface I {
     String FIELD = "Some field";

     void method();
 }

事实上可以写成:

public interface I {
     public static final String FIELD = "Some field";

     public abstract void method();
}

然后您会看到界面中的字段都是public static final和方法public abstract

因为字段是static final并且接口中不允许static-initializer-blocks,所以必须直接初始化它,因此不使用构造函数。

答案 1 :(得分:2)

这个btw与类中的public static final变量没什么区别 - 它不会被构造函数初始化,因为它是constant - javap输出 ConstantValue

 class Test {
      public static final int x = 5; // ACC_PUBLIC, ACC_STATIC, ACC_FINAL
                                     //   ConstantValue: int 5

      public int y = 3; // putfield , initialized inside default constructor 
 }

编辑 Holger在他的评论中是正确的,可以是静态块中的初始化代码。例如,有一个类:

class C {

}

在界面中有一个引用:

interface Test {
    C c = new C();
}

会在编译时导致静态块看起来像这样:

interface Test {

    C c;

    static {
        c = new C();
    }
}