JVM如何使用"Main方法"启动Java程序?

12

main 在 Java 中并不是一个关键字。JVM 如何知道将 main 方法作为任何程序的入口点来执行?


请注意,在C/C++和C#中,这也不是一个关键词。猜想这只是一种传统。 - Sergei Tachenov
5个回答

12

main在Java中不需要成为关键字,以便JVM在执行开始时寻找它。其他被称为main的方法或变量也不会冲突。这只是JVM规范的设计方式。这个规范可能是从C语言借鉴而来。

Java规范参考:关键字调用main方法


2
请注意,重要的不仅是方法名称,还需要它是“静态”的(也许还需要是“void”),并且将一个String[]作为唯一参数。+1 - Thilo
@Thilo:正确。方法签名必须是public static void main(String[] args)才能在启动时被调用。 - Asaph
回到旧的 Mac OS 7(或8?)时代,没有命令行,Mac JVM 也允许一个没有参数的主函数。幸运的是,现在已经统一了(不再起作用)。 - Thilo
1
同一项目中有多个Main是没有问题的,这完全取决于您如何启动项目。 - Jason Rogers

10

这个内容在JLS中有明确规定。

12 执行

...

Java虚拟机通过加载一个指定的类并调用该类中的main方法来启动。第§12.1章节概述了执行main涉及的加载、链接和初始化步骤,作为本章概念的介绍。更进一步的章节详细说明了加载(§12.2)、链接(§12.3)和初始化(§12.4)的细节。

...

12.1 虚拟机启动

Java虚拟机通过调用某个指定类的main方法并将一个字符串数组作为参数传递给它来开始执行。在本规范中的示例中,通常把这个第一类称为Test

...

12.1.4 调用 Test.main

最终,在完成Test类的初始化(期间可能已发生其他重要的加载、链接和初始化)之后,将调用Test类的main方法。

main方法必须声明为publicstaticvoid。它必须接受一个字符串数组作为单个参数。


你的所有链接现在都已经失效了。 - hat

0
它通过使用反射来调用此方法。你可以查看Java Web Start的源代码作为例子。

它通过使用反射来调用此方法。这意味着在运行时它会搜索具有主方法的类。是这样吗? - Sanjay Jain
2
在运行 jar 文件时,可以通过指定包含 main 方法的类名来运行,或者可以在 jar 的清单文件中指定主类。在 Java Web Start 中,需要在 jnlp 文件中指定主类。 - Petro Semeniuk

0

-2

Main通常是中央方法的普遍指示器,因此当提供public static时,Java会自动将其作为中央方法。

public static void main

我不确定你的意思是什么...但对我来说,它似乎没有回答问题。 - icedwater

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接