接口内部的主要方法(java-8)
作者:互联网
这个问题已经在这里有了答案: > Why are interfaces in Java 8 allowed to have the main method? 5个
由于java-8允许在接口内部使用静态方法,因此我决定检查一下,这样简单的编译程序能否成功运行:
public interface Test {
static void main(String[] args) {
System.out.println("I'm ok!");
}
}
令人惊讶的(对我而言)它运行完美.
我感到困惑的是,在JVM规范术语中,类和接口具有不同的语义和用法.在这种情况下,我担心这种行为是否确实符合JVMS?因为实际上JVMS Ch. 5.2.谈论的是类,而不是类或接口:
The Java Virtual Machine starts up by creating an initial class, which
is specified in an implementation-dependent manner, using the
bootstrap class loader (§5.3.1). The Java Virtual Machine then links
the initial class, initializes it, and invokes the public class method
void main(String[]).
UPD:
我知道,该接口本身就是一个类.但是我说的是JVM,其中类和接口通常具有不同的语义. For example
The run-time constant pool for a class or interface is constructed
when the class or interface is created (§5.3) by the Java Virtual
Machine.
解决方法:
JVM规范在这里措辞有点松懈.如果您引用的是section 5.3.1,它表示:
The following steps are used to load and thereby create the nonarray class or interface C denoted by N using the bootstrap class loader.
关键是无论C是类还是接口,都遵循相同的过程.
Java语言规范在描述虚拟机启动方面同样不一致,在某一点使用“类”,而在另一处使用“类或接口”.
无论如何,将main方法作为接口的一部分应该可以很好地工作.
标签:java-8,jvm,specifications,java 来源: https://codeday.me/bug/20191119/2034245.html