6

我只是想知道我们的主要方法实际上是从哪里调用的。就像在 Eclipse 中一样,当我们将它作为应用程序运行时,它会自动被调用。但是,如果我编写另一个具有相同签名但名称不同的方法,它不会被调用

4

6 回答 6

7

从文档中Java Virtual Machine

描述

java 工具启动 Java 应用程序。它通过启动 Java 运行时环境、加载指定的类并调用该类的 main 方法来做到这一点。方法声明必须如下所示:

公共静态无效主(字符串参数 [])

该方法必须声明为 public 和 static,它不能返回任何值,并且它必须接受一个 String 数组作为参数。默认情况下,第一个非选项参数是要调用的类的名称。应使用完全限定的类名。如果指定了 -jar 选项,则第一个非选项参数是包含应用程序的类和资源文件的 JAR 归档的名称,启动类由 Main-Class 清单头指示。

Java 运行时在三组位置搜索启动类和其他使用的类:引导类路径、已安装的扩展和用户类路径。

类名或 JAR 文件名之后的非选项参数传递给主函数。

javaw 命令与 java 相同,只是 javaw 没有关联的控制台窗口。当您不希望出现命令提示符窗口时,请使用 javaw。但是,如果由于某种原因启动失败,javaw 启动器将显示一个包含错误信息的对话框。

于 2013-06-29T12:41:39.957 回答
4

它在Java 语言规范 12.1中指定:

“Java 虚拟机通过调用某个指定类的 main 方法开始执行,并传递给它一个参数,该参数是一个字符串数组”

于 2013-06-29T12:42:02.557 回答
1

它由 JVM 自动调用,由JVMS指定(第 5.2 节。Java 虚拟机启动):

Java 虚拟机通过使用引导类加载器(第 5.3.1 节)创建一个初始类来启动,该类以依赖于实现的方式指定。Java 虚拟机然后链接初始类,对其进行初始化,并调用公共类方法void main(String[])

因此,main()很特别。JVM 不会自动调用具有相同签名但名称不同的不同方法。

于 2013-06-29T12:41:46.257 回答
0

main 方法是程序的入口点。它在程序启动时由 JVM 调用一次。

于 2013-06-29T12:42:23.090 回答
0

对于 *.jar 文件,您可以通过提供in来设置主类(即main()要调用的类)。在命令行调用中,您只需执行. 您可以在您选择的 IDE 中设置这些(例如,在 IntelliJ Idea 中,它是“运行”菜单中“编辑配置”中的主类条目。我猜在 Eclipse 或 NetBeans 中,类似的东西。Main-Class: classnamemanifestjava Main_class_name

于 2013-06-29T13:06:13.147 回答
0

当您执行 java 类时第 1 步:类文件被加载到 JVM

第 2 步:JVM 读取字节码

第 3 步:JVM 搜索所有关键字

第 4 步:JVM 搜索静态块

第 5 步:JVM 搜索异步块

第 6 步:JVM 创建一个 HASH MAP,其中 key 是优先级

第7步:根据优先级JVM从上到下执行静态块,从上到下异步块

第 8 步:在此 JVM 搜索带有声明的方法之后

public static void main (String args[])

并执行它

所以回答你的问题,当一个类被执行时,JVM调用main方法

于 2013-11-15T07:02:38.017 回答