这段代码如何合法java?

One*_*ree -1 java

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

static interface MyInter {
    int foo = 3; 
}
static {
    System.out.println(MyInter.foo);
}
Run Code Online (Sandbox Code Playgroud)

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

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

rge*_*man 5

是的,在接口中声明域都默认public,staticfinal.

JLS第9.3节规定:

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