当我们不传递任何命令行参数时,为啥我们不会得到错误?
Posted
技术标签:
【中文标题】当我们不传递任何命令行参数时,为啥我们不会得到错误?【英文标题】:Why don't we get an error when we don't pass any command line arguments?当我们不传递任何命令行参数时,为什么我们不会得到错误? 【发布时间】:2011-11-11 00:51:02 【问题描述】:我们可以将参数args[]
提供给main()
方法,或者选择不提供。但是如果我们在没有传递足够参数的情况下调用任何其他参数化方法,就会给我们一个错误。
为什么main(String[] args)
方法不是这样?
【问题讨论】:
你能不能说的更清楚一点,你是如何执行带参数和不带参数的应用程序的? 相关答案,你可以像public void myMethod(String...array)
这样做同样的事情,你可以传递任何数量的参数,即使是0,也不会出错。
【参考方案1】:
public static void main(String[] args)
main
总是接收它的参数,这是一个String
的数组。如果你不传递任何命令行参数,args
是空的,但它仍然存在。
【讨论】:
【参考方案2】:始终传递一个字符串数组,即使不存在命令行参数。在这种情况下,数组的长度为 0,您可以通过
自行测试public static void main(String[] args)
if (args.length == 0)
System.out.println("no parameters were passed");
【讨论】:
【参考方案3】:如您所见,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。
【讨论】:
【参考方案4】:Java 用参数调用主方法本身,因此即使我们“调用”不带参数也不会出错。
【讨论】:
【参考方案5】:因为Main
是特殊的,并且在没有给出任何内容的情况下会自动在 leu 中取一个空的String array
。因为这准确地描述了在没有参数的情况下调用main()
。系统提供此功能是为了方便。
【讨论】:
错了。null
与此无关。【参考方案6】:
我认为以上答案已经捕获了足够的信息,因此 args 总是带有价值。
所以,我试着用编程的方式稍微解释一下。
想象一下,当没有参数传入命令行时
就像调用 main(null) 然后 args = null;
当有参数传入命令行时 args = '传递的值';
因此,即使没有传入参数,它仍然可以执行。
那里
【讨论】:
以上是关于当我们不传递任何命令行参数时,为啥我们不会得到错误?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在传递引用的参数时会得到“/bin/sh:参数列表太长”?
为啥我们将字符串数组作为参数传递给 main() 方法,为啥不传递任何集合类型或包装类型或原始类型?
为啥 PHP 5.2.14 不会显示任何错误(即使是从命令行)?