我是java的初学者。执行一个简单的程序时,我注意到在main方法中
public static void main(String args[])
args[]
可以给任何名字,它会成功执行。这是为什么?
我是java的初学者。执行一个简单的程序时,我注意到在main方法中
public static void main(String args[])
args[]
可以给任何名字,它会成功执行。这是为什么?
当你调用一个方法时,你并不关心它的参数名称是什么,对吗?
说我有这个方法:
public static void doStuff(int number) {}
我可以这样称呼它:
doStuff(10);
我需要number
在调用代码的任何地方使用参数名称吗?不。
即使您通过反射调用该方法(我认为这是您运行 java 程序时实际发生的情况),您也不需要参数名称。
Method m = clazz.getMethod("main", String[].class);
m.invoke(null, null);
坦率地说:因为文档是这样说的。1
main
必须是, ,并public
接受一个 s 数组作为它的参数。其余的由程序员决定……但除了参数的名称之外,剩下的不多了。static
void
String
我不能代表 Java 背后的许多想法,但是强制使用参数的名称并不是那么重要;当 JVMargs
想要调用main
. 重要的是签名,它由返回类型、名称和传入参数的类型定义。
主要方法必须具有特定的签名。签名指定方法名称和参数类型,但不指定参数名称。
换句话说,is 必须是 public、static 和 void,称为 main,并以 String 数组作为参数。它不需要该参数的特定名称。
args
只是类型的变量名String[]
。它就像您在程序中拥有的任何其他变量名一样。
如前所述,变量名只是内部的,编译器只关心类型(字符串数组)。例如,如果您使用反射调用该方法,则只需传递参数数组 object[] { new String[]{ "my arguments args[]" } ....