【发布时间】:2010-06-22 19:35:45
【问题描述】:
我尝试运行一个小型 c# 和 java 程序(使用 VS 和 NetBeans,而不是从命令行)并打印 args[0] 的值,但我得到了一个 IndexOutOfRangeException。
我知道args 用于传递命令行参数,但它在main 方法中仍然是仍然,那么如果没有传递给它的args 参数,程序将如何运行?
【问题讨论】:
-
它首先检查数组 args 的长度?
我尝试运行一个小型 c# 和 java 程序(使用 VS 和 NetBeans,而不是从命令行)并打印 args[0] 的值,但我得到了一个 IndexOutOfRangeException。
我知道args 用于传递命令行参数,但它在main 方法中仍然是仍然,那么如果没有传递给它的args 参数,程序将如何运行?
【问题讨论】:
那么如果没有传入args参数,程序将如何运行呢? 创建程序时,会分配一个新数组并用命令行中的值填充。
如果没有(因为您没有在 IDE 中指定它们)数组将为空(不为 null,至少在 Java 中不存在)
要避免使用 IndexOutOfRangeException,您必须要么不使用参数,要么分配默认值并验证 args 数组长度。
例如(在 Java 中)
public class YourClass {
public static void main( String [] args ) {
String param = "someDefault";
// validate args.length
if( args.length > 0 ) { // if there is a parameter
param = args[0]; // use it
}
// continue with "param" already defined.
}
}
【讨论】:
Java 允许空数组;即
String[] args = new String[0];
由于index >= args.length,异常一致。
关于这个特定主题,还有一点需要注意:与 C 程序等不同,arg 0 不是程序本身。因此,使用空数组调用 main(String[]) 是很常见的。
【讨论】:
如果没有参数,则数组将为空 - 如果未传递任何数组,您将使用 NullReferenceException。
【讨论】:
args[] 数组中只有在命令行中传递的元素。
java my.test.MyTest arg1 arg2
这将导致参数 arg1 和 arg2 在 arg[] 数组中传递。如果不传递任何参数,则 arg[] 数组的长度为 0,因此访问任何索引都会引发异常。
【讨论】:
在某些情况下,调用命令行 exe 时不包含任何参数是完全合理的。 args 参数是为了让您知道 args 是否被传递,如果是,它们是什么。
【讨论】: