5

我们可以为方法提供参数args[]main()选择不提供。但是,如果我们在没有传递足够参数的情况下调用任何其他参数化方法,就会给我们一个错误。

为什么方法不是这样main(String[] args)

4

6 回答 6

10
 public static void main(String[] args)

main总是接收它的参数,它是一个数组String。如果您不传递任何命令行参数,args则为空,但它仍然存在。

于 2011-09-06T05:39:09.007 回答
4

始终传递一个字符串数组,即使不存在命令行参数。在这种情况下,数组的长度为 0,您可以通过以下方式自行测试

public static void main(String[] args) {
   if (args.length == 0) {
      System.out.println("no parameters were passed");
   }
}
于 2011-09-06T05:38:32.590 回答
2

如您所见, main 除了一个函数参数 - 它是一个字符串数组。JVM 负责将任何命令行参数作为字符串数组传递给主函数。如果没有给出参数,则传递一个空数组 - 但它仍然存在。

您也可以将自己的函数定义为:

void myMain(String args[]) {
   for(int i = 0; i < args.length; i++) {
       System.out.println(args[i]);
   }
}

然后您可以调用此函数,模拟传递三个命令行参数:

 String a[] = {"foo", "bar", "bah"};
 myMain(a);

或者您可以模拟没有给出命令行参数的情况:

String a[] = {};
myMain(a);

您也可以args从真正的 main 传递给您的函数,无论是否给出任何参数,它都会起作用:

public static void main(String[] args) {
    myMain(args);
}

请注意,没有空指针检查,myMain因此如果您将它传递给null它,它将抛出 NPE。

于 2011-09-06T06:09:17.217 回答
1

因为是特殊的,并且在没有给出任何内容的情况下Main自动取一个空的 leu。String array因为这准确地描述了main()没有参数的调用。系统提供此功能是为了方便。

于 2011-09-06T05:36:00.687 回答
1

Java 使用参数调用 main 方法本身,因此即使我们“调用”不带参数也不会出错。

于 2011-09-06T05:36:38.860 回答
0

我认为上面的答案已经捕获了足够的信息,因此 args 总是有价值的。

所以,我试着用编程的方式稍微解释一下。

想象一下,当没有参数传入命令行时

就像调用 main(null) 然后 args = null;

当有参数传入命令行时 args = 'passed value';

因此,即使没有传入参数,它仍然可以执行。

那里

于 2020-12-03T06:48:28.897 回答