我只是想知道我们的main方法实际调用的位置。 在eclipse中,当我们将它作为应用程序运行时,它会自动被调用。但是,如果我写另一个具有相同签名但名称不同的方法,则不会被称为
答案 0 :(得分:7)
来自Java Virtual Machine
的文档:
说明
java工具启动Java应用程序。这是通过开始一个 Java运行时环境,加载指定的类,并调用它 阶级的主要方法。方法声明必须如下所示 以下内容:
public static void main(String args [])
必须声明方法 公共和静态,它不能返回任何值,它必须接受一个 字符串数组作为参数。默认情况下,第一个非选项参数 是要调用的类的名称。完全限定的类名 应该使用。如果指定了-jar选项,则为第一个非选项 argument是包含类和资源的JAR存档的名称 应用程序的文件,启动类由 Main-Class清单标题。
Java运行时搜索启动类和其他类 在三组位置中使用:bootstrap类路径, 已安装的扩展和用户类路径。
传递类名或JAR文件名后的非选项参数 到主要功能。
javaw命令与java相同,除了javaw命令 没有关联的控制台窗口。当你不想要一个时使用javaw 命令提示符窗口出现。但是,javaw启动器将 如果某些启动失败,则显示包含错误信息的对话框 原因。
答案 1 :(得分:4)
在The java Language Specification, 12.1中指定:
“Java虚拟机通过调用某个指定类的方法main来启动执行,并传递一个参数,这是一个字符串数组”
答案 2 :(得分:1)
由JVM自动调用,由JVMS(§5.2.Java虚拟机启动)指定:
Java虚拟机通过使用引导类加载器(第5.3.1节)创建一个初始类来启动,该类以依赖于实现的方式指定。然后Java虚拟机链接初始类,初始化它,并调用公共类方法
void main(String[])
。
因此,main()
很特别。具有相同签名但名称不同的其他方法不会自动由JVM调用。
答案 3 :(得分:0)
main方法是程序的入口点。程序启动时,它由JVM调用一次。
答案 4 :(得分:0)
对于* .jar文件,您可以通过在main()
中提供Main-Class: classname
来设置主类(即要调用其manifest
的类)。在命令行调用中,您只需执行java Main_class_name
。您可以在您选择的IDE中设置它们(例如,在运行中的'编辑配置'中的主类条目)菜单。在Eclipse或NetBeans中,我想,类似的东西。
答案 5 :(得分:0)
执行java类时 第1步:将类文件加载到JVM
第2步:JVM读取字节码
第3步:JVM搜索所有关键字
第4步:JVM搜索静态块
步骤5:JVM搜索异步块
步骤6:JVM创建一个HASH MAP,其中key为优先级
第7步:根据优先级JVM从上到下执行静态块,从上到下执行asysnchronous块
步骤8:此JVM在使用声明
搜索方法之后public static void main (String args[])
并执行它
所以回答你的问题,当一个类被执行时,JVM调用main方法