Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么main应该出现在Java类中?_Java - Fatal编程技术网

为什么main应该出现在Java类中?

为什么main应该出现在Java类中?,java,Java,为什么要声明main方法?我知道main方法是这个类的起点。但为什么我们只应该将其声明为公共静态void main(字符串args[]) 为什么我们不能将其声明为公共静态无效测试(字符串args[])? main是关键词吗?JVM如何知道它将是起点?JVM必须知道程序的起点在哪里。设计师选择标记的方式是调用entry方法main,因为在C中使用相同的名称(当时大多数程序员都很熟悉),这是有意义的。名称没有什么特别神奇的地方,他们只需要选择一些东西,这是一个实际的选择。它是静态的-编译器不需要创建

为什么要声明
main
方法?我知道
main
方法是这个类的起点。但为什么我们只应该将其声明为
公共静态void main(字符串args[])

为什么我们不能将其声明为
公共静态无效测试(字符串args[])

main
是关键词吗?JVM如何知道它将是起点?

JVM必须知道程序的起点在哪里。设计师选择标记的方式是调用entry方法
main
,因为在C中使用相同的名称(当时大多数程序员都很熟悉),这是有意义的。名称没有什么特别神奇的地方,他们只需要选择一些东西,这是一个实际的选择。

它是静态的
-编译器不需要创建一个对象就可以进入该方法
void
-java是独立于平台的。因此,如果它返回某个内容,可能会因平台而异

公共
-用于访问


main()是必需的,这样编译器就可以进入应用程序。顾名思义,它是应该首先执行的主要方法。

当程序开始时,它必须从某处开始。。嗯,这是
主要的
方法


为什么是静态的

  • 当JVM调用main方法时,被调用的类不存在对象。所以它必须有一个静态方法来允许这个类

为什么公开

  • JVM调用main方法来运行项目范围之外的方法
为什么无效

  • 想想看,一旦主方法完成,并不意味着程序就完成了。如果它生成了一个新线程,则可能是这些线程仍在运行

JVM遵循一个规范,并以JLS的形式与开发人员共享该规范。JVM在其规范中提到,以下形式的main方法是任何独立java应用程序的起点:

public static void main(String args[])
根据规范:

因此,作为开发人员,我们应该遵守JVM规范,以便JVM能够理解我们要做的事情

如果我的回答不具描述性或不可理解,请遵循规范:

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

阅读更多:


没有main方法,您可以编译任何Java类,但是没有main()方法,独立应用程序无法运行


main方法是定义在应用程序开始时调用的方法。没有它,就没有开始运行的地方。

类中可能有许多方法是公共的和静态的。JVM如何决定哪个方法是启动程序。为了避免歧义,Java语言为JVM执行的方法确定了一个特定的标准。本标准规定“自执行类应具有具有以下签名的方法:

public static void main(String[] arg) {  }
下面是这个标准如何帮助JVM

Public:它允许JVM访问和执行类的方法 静态:该方法可以仅按类名执行(无需生成对象) void:不返回任何内容(JVM不希望您的方法返回任何内容) main:为了使类能够自执行,JVM查找此方法名称,并且程序的生命周期从此方法的第一条语句到此方法的最后一条语句都是有效的。一旦执行此方法的最后一条语句,程序就会终止,JVM实例也会死亡。此名称标准还帮助JVM找到一个p特定入口点。如果JVM允许任何名称,那么它将是多个入口点,JVM将被混淆。因此他们决定使用单个入口点并将其命名为main

为什么我们要声明main方法?我知道main方法是类的起点。但是为什么我们只应该声明为
公共静态void main(String args[])

基本上,因为这就是它的定义。(而他们决定使用“主”而不是其他名称的原因是“Maple”是C或C++程序入口点的名称。


为什么我们不能声明为公共静态无效测试(字符串args[])

因为JVM不能找到入口点。假设,假设入口点方法可以是任何东西。现在考虑这个例子:

public class Test {
    public static void foo(String[] args) { ... }

    public static void bar(String[] args) { ... }
}
…这个命令行

$ java Test
调用哪个方法?调用
foo
方法?调用
bar
方法


这是主要的关键词吗

不是。它只是一个众所周知的方法名称。就核心Java语言而言,
main
方法只是一个具有特定签名的方法。实际上,您可以在同一类中使用具有不同签名的其他
main
方法


JVM如何知道它将是起点

因为指定JVM使用
main
方法作为起点


为什么main应该出现在Java类中


嗯……如果你有其他方法来启动JVM,使用不同的约定作为入口点,那么你不必在每个类中都有一个
main
方法。但是,如果你想让你的应用程序可以运行,那么你至少需要一个类具有合适的
main
方法。

ion必须从某个地方开始,是吗?从时间的黎明(1972?)开始,
main
一直是一个方向,为什么要在java中更改它?@sanbhat这个问题没有明确的措辞,我将进行编辑。问题似乎是为什么该方法被命名为
main
,而不是为什么它需要是静态的。它不是一个关键字。”JVM如何知道它是