当我们不传递任何命令行参数时,为什么我们不会收到错误?

时间:2011-09-06 05:32:17

标签: java string methods main args

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

为什么不是main(String[] args)方法的情况?

6 个答案:

答案 0 :(得分:10)

 public static void main(String[] args)

main始终接收其参数,该参数是String的数组。如果您没有传递任何命令行参数,args为空,但它仍然存在。

答案 1 :(得分:4)

即使没有命令行参数,也始终传递String数组。在那种情况下,数组的长度为0,您可以通过

自行测试
public static void main(String[] args) {
   if (args.length == 0) {
      System.out.println("no parameters were passed");
   }
}

答案 2 :(得分:2)

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

您也可以将自己的功能定义为:

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从真正的主要版本传递给你的函数,无论是否给出任何参数,它都会有效:

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

请注意myMain中没有空指针检查,所以如果你传递null它会抛出NPE。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

Java使用参数调用main方法本身,因此即使我们没有参数“调用”,也没有错误。

答案 5 :(得分:0)

我认为以上答案已经捕获了足够多的信息,使得args总是有价的。

因此,我尝试以编程方式稍作解释。

试想一下,当没有参数传递到命令行时

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

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

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