这段代码是如何合法使用java的?

这段代码是如何合法使用java的?,java,Java,我最近意识到您可以做到这一点(至少在Java1.7+) 这到底合法吗? java编译器只是将intfoo转换为场景后面的最终静态字段还是什么 (如果是这样的话,那么,哇,Java变得越来越疯狂了!)是的,接口中声明的字段是隐式的公共的,静态的,和最终的 国家: 接口主体中的每个字段声明都是隐式公开、静态和最终的。允许为此类字段冗余指定任何或所有这些修饰符 该规范允许接口具有字段。所有这些都是公共静态最终的,但是这些修饰符可以省略 接口主体中的每个字段声明都是隐式的 公共、静态和最终。允许冗余指定

我最近意识到您可以做到这一点(至少在Java1.7+)

这到底合法吗? java编译器只是将
intfoo
转换为场景后面的最终静态字段还是什么


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

是的,接口中声明的字段是隐式的
公共的
静态的
,和
最终的

国家:

接口主体中的每个字段声明都是隐式公开、静态和最终的。允许为此类字段冗余指定任何或所有这些修饰符


该规范允许接口具有字段。所有这些都是公共静态最终的,但是这些修饰符可以省略

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


那个
static
块在哪里?好吧,就在
MyInter
decl的正下方,在同一个类中,因为这正是接口中声明的字段的工作方式,并且一直都在工作。Java自1.0版起就具有此功能。只有你对Java的看法在改变。
static interface MyInter {
    int foo = 3; 
}
static {
    System.out.println(MyInter.foo);
}