我最近意识到你可以做到这一点(至少在Java 1.7 +中)。
static interface MyInter {
int foo = 3;
}
static {
System.out.println(MyInter.foo);
}
这究竟是怎么合法的?
java编译器只是将int foo
转换为场景后面的最终静态字段吗?
(如果是这样,那么,哇,Java变得越来越疯狂了!)
答案 0 :(得分:5)
是,接口中声明的字段是隐式public
,static
和final
。
接口主体中的每个字段声明都是隐式的public,static和final。允许为这些字段冗余地指定任何或所有这些修饰符。
答案 1 :(得分:0)
规范允许接口具有字段。所有这些都是公共静态final,但是这些修饰符可能会被省略。
接口主体中的每个字段声明都是隐式的 公共,静态和最终。允许冗余指定任何 或者所有这些领域的修饰语。
http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.3