我一直认为main方法必须在Java中的一个类内部,但这里它是在接口内部

public interface Main {
  static void main(String[] args){
    System.out.println("HelloWorld");
  }
}

并且它可以毫无问题地编译和运行

$ javac Main.java 
$ java Main
HelloWorld
$ java -version
openjdk version "17.0.8" 2023-07-18
OpenJDK Runtime Environment (Alibaba Dragonwell Standard Edition)-17.0.7.0.7+7-GA (build 17.0.8+7)
OpenJDK 64-Bit Server VM (Alibaba Dragonwell Standard Edition)-17.0.7.0.7+7-GA (build 17.0.8+7, mixed mode, sharing)

那么它也能成为一个界面吗?

推荐答案

根据JLS v17,这绝对没问题.来自section 12.1强调的我:

Java虚拟机通过调用某个指定类or interface的main方法来开始执行,并向它传递一个字符串数组的参数.

看起来其他一些文本尚未更新以在任何地方都包含"或界面",但这绝对是一个故意的更改.

包括"或接口"的第一个版本是v9 - v8 text仍然只有"某个指定的类".

Java相关问答推荐

我们如何直接使用kerminldap服务票证来通过ldap进行身份验证并形成LDAP上下文

我的scala文件失败了Scala.g4 ANTLR语法

如何在Javascript中设置文本区域圆角的样式

Java WireMock定义存根在Cucumber并行执行的多线程测试中失败

ittext pdf延迟签名,签名无效

有关手动创建的包的问题

上下文初始化期间遇到异常-使用Java配置配置HibernateTemplate Bean时

编译多个.Java文件并运行一个依赖于用户参数的文件

在Java Swing Paint应用程序中捕获快速鼠标移动时遇到困难

JPanel透支重叠的JComcoBox

更新GWT 2.5.1到2.11.0和sencha GXT 3.1.1到4.1时出现错误

Java中将文本拆分为数字或十进制数字和字符串

为什么我的回收视图会显示重复的列表?

无法使用Freemarker从XML中读取重复的标记值

视图被推出线性布局-Android

在实例化中指定泛型类型与不指定泛型类型之间的区别

升级版本后出现非法访问错误

spring 数据Elastic search 与 spring 启动数据Elastic search 之间的区别是什么?

始终使用Spring Boot连接mongodb上的测试数据库

窗口启动后不久,从java.awt.Graphics disapear创建的矩形