【问题标题】:How is this piece of code legal java? [duplicate]这段代码如何合法java? [复制]
【发布时间】:2014-03-07 21:24:17
【问题描述】:

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

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

这究竟是如何合法的? java编译器是否只是将int foo变成了幕后的最终静态字段?

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

【问题讨论】:

  • static 块在哪里?
  • 嗯,就在MyInter decl的正下方,在同一个班级
  • 因为这正是接口中声明的字段的工作方式,并且一直有效。
  • 这个特性从 Java 1.0 开始就已经存在。只有你对 Java 的看法在发生变化。

标签: java


【解决方案1】:

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

Section 9.3 of the JLS 状态:

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

【讨论】:

    【解决方案2】:

    规范允许接口具有字段。所有这些都是 public static final,但是这些修饰符可以省略。

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

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

    【讨论】:

      猜你喜欢
      • 2013-05-04
      • 1970-01-01
      • 2010-10-31
      • 2014-10-28
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      相关资源
      最近更新 更多