由于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)以一种实现相关的方式创建一个初始类。然后,Java虚拟机链接初始类,初始化它,并调用公共类方法void main(String[])。
更新:
我知道,接口本身就是一个类。但我谈论的是JVM,其中class
和interface
经常具有不同的语义。例如
当Java虚拟机创建(§5.3)类或接口时,将构造该类或接口的运行时常量池。
.class
文件。你不能创建一个抽象类或接口的实例,但现在与过去相比,它们之间的差异并不是那么大了。 - Peter Lawreypackage-info.java
文件中。 - Peter Lawrey