这段代码如何合法java?

时间:2014-03-07 21:24:17

标签: java

我最近意识到你可以做到这一点(至少在Java 1.7 +中)。

static interface MyInter {
    int foo = 3; 
}
static {
    System.out.println(MyInter.foo);
}

这究竟是怎么合法的? java编译器只是将int foo转换为场景后面的最终静态字段吗?

(如果是这样,那么,哇,Java变得越来越疯狂了!)

2 个答案:

答案 0 :(得分:5)

是,接口中声明的字段是隐式publicstaticfinal

Section 9.3 of the JLS州:

  

接口主体中的每个字段声明都是隐式的public,static和final。允许为这些字段冗余地指定任何或所有这些修饰符。

答案 1 :(得分:0)

规范允许接口具有字段。所有这些都是公共静态final,但是这些修饰符可能会被省略。

  

接口主体中的每个字段声明都是隐式的   公共,静态和最终。允许冗余指定任何   或者所有这些领域的修饰语。

http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.3