1

我是java的初学者。执行一个简单的程序时,我注意到在main方法中

public static void main(String args[])

args[]可以给任何名字,它会成功执行。这是为什么?

4

5 回答 5

3

当你调用一个方法时,你并不关心它的参数名称是什么,对吗?

说我有这个方法:

public static void doStuff(int number) {}

我可以这样称呼它:

doStuff(10);

我需要number在调用代码的任何地方使用参数名称吗?不。

即使您通过反射调用该方法(我认为这是您运行 java 程序时实际发生的情况),您也不需要参数名称。

Method m = clazz.getMethod("main", String[].class);
m.invoke(null, null);
于 2017-07-03T15:18:05.227 回答
1

坦率地说:因为文档是这样说的。1

main必须是, ,并public接受一个 s 数组作为它的参数。其余的由程序员决定……但除了参数的名称之外,剩下的不多了。staticvoidString

我不能代表 Java 背后的许多想法,但是强制使用参数的名称并不是那么重要;当 JVMargs想要调用main. 重要的是签名,它由返回类型、名称和传入参数的类型定义。

于 2017-07-03T15:17:25.093 回答
1

主要方法必须具有特定的签名。签名指定方法名称和参数类型,但不指定参数名称。

换句话说,is 必须是 public、static 和 void,称为 main,并以 String 数组作为参数。它不需要该参数的特定名称。

于 2017-07-03T15:20:25.283 回答
0

args只是类型的变量名String[]。它就像您在程序中拥有的任何其他变量名一样。

于 2017-07-03T15:07:00.677 回答
-2

如前所述,变量名只是内部的,编译器只关心类型(字符串数组)。例如,如果您使用反射调用该方法,则只需传递参数数组 object[] { new String[]{ "my arguments args[]" } ....

于 2017-07-03T15:07:20.637 回答