我猜jvm有点问题。但是jvm如何识别它呢?对于名称main,还是静态属性?
这就是我的小困惑。
当JVM通过指定一个类来运行应用程序时,它将查找具有public static void main(String[])
签名的主方法。
Java main方法是任何Java程序的入口点。它的语法总是public static void main(String[] args)
。
当java运行时启动时,不存在类的对象。这就是为什么main方法必须是静态的,以便JVM可以将类加载到内存中并调用main方法。如果main方法不是静态的,JVM将无法调用它,因为没有类的对象存在
你可以在这里找到详细的解释。
;根据Java语言规范(JLS)的规定,main
方法和static
方法都是不够的,需要两者都有。
如果有关于JVM的东西,那么它通常在Java语言规范中指定。在这种情况下,是第12.1节规定了main方法的要求:
public static void main(String[] args)
或
public static void main(String... args)
所以,而不是仅仅是静态它也需要是公共的,并有一个void
返回类型(整数更有意义,也许,但Java是多线程的,所以返回值是使用System.exit(int)
给出)。此外,它必须接受String
参数,正如您所期望的那样。
请注意,main
方法被设计为在CLI环境中使用,例如Windows中的命令行或Linux/Unix/MacOS中的许多shell之一。它类似于C/c++的main
方法;Java是基于C/c++语言开发的。
我也在Java 18中检查了这一点,文本仍然是相同的。