由于java-8允许在接口中使用静态方法,所以我决定检查一下,这样一个简单的编译程序能否成功地运行:
public interface Test {
static void main(String[] args) {
System.out.println("I'm ok!");
}
}令人惊讶的是(对我来说)它运行得很完美。
令我困惑的是,在JVM规范中,class和interface有不同的语义和用法。在这种情况下,我担心这种行为真的是根据JVMS吗?因为事实上JVMS Ch.5.2。谈论class而不是class or interface
Java通过使用引导类加载程序创建初始类来启动(§5.3.1),该类是以依赖于实现的方式指定的。然后,链接初始类,初始化它,并调用公共类方法void (String[])。
UPD
我知道,这个接口本身就是一个类。但是我说的是JVM,在这里,class和interface通常有不同的语义。例如
类或接口的运行时常量池是在Java虚拟机创建类或接口时构造的(§5.3)。
发布于 2016-01-10 20:19:14
JVM规范在这里的措辞有点松懈。如果您引用引用的第5.3.1节,它会说:
以下步骤用于加载,从而使用引导类加载器创建以N表示的非数组类或接口C。
问题是,不管C是类还是接口,都会遵循相同的过程。
Java语言规范在描述虚拟机启动时同样不一致,一方面使用“类”,另一方面使用“类或接口”。
无论如何,将main方法作为接口的一部分应该非常好地工作。
https://stackoverflow.com/questions/34710274
复制相似问题