由于Interface中没有构造函数,谁在java中初始化接口的变量?
答案 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();
}
}