我希望对我的命令行参数进行一些错误检查
public static void main(String[] args)
{
if(args[0] == null)
{
System.out.println("Proper Usage is: java program filename");
System.exit(0);
}
}
但是,这会返回一个数组越界异常,这是有道理的。我只是在寻找正确的用法。
答案 0 :(得分:144)
参数永远不会是null
。他们不会存在。
换句话说,您需要做的是检查参数的长度。
public static void main(String[] args)
{
// Check how many arguments were passed in
if(args.length == 0)
{
System.out.println("Proper Usage is: java program filename");
System.exit(0);
}
}
答案 1 :(得分:15)
null
数组)中看到null
字符串。
但是,如果应用程序的某些其他部分调用main
方法,则可以想象它可能会传递main
参数或null
参数数组。
然而(2),这显然是一个非常不寻常的用例,和它严重违反了null
入口点方法的隐含合约。因此,我认为您不应该在main
中检查null
参数值。万一它们确实发生,调用代码可以获得main
。毕竟,调用者违反合同是一个错误。
答案 2 :(得分:9)
要扩展这一点:
args变量本身可能为null,但不能通过正常执行。正常执行将使用java.exe
作为命令行的入口点。但是,我看到一些程序使用编译后的C++
代码和JNI来使用jvm.dll
,完全绕过java.exe。在这种情况下,可以将NULL
传递给main方法,在这种情况下args将为null。
我建议您根据需要随时查看if ((args == null) || (args.length == 0))
或if ((args != null) && (args.length > 0))
。
答案 3 :(得分:0)
如果我想检查命令行争论的具体位置是否通过,那么如何检查? 例如 在某些情况下,将传递2个命令行参数,而在某些情况下,仅传递1个参数,然后如何检查特定的commnad行是否通过?
public class check {
public static void main(String[] args) {
if(args[0].length()!=0)
{
System.out.println("entered first if");
}
if(args[0].length()!=0 && args[1].length()!=0)
{
System.out.println("entered second if");
}
}
}
因此在上面的代码中,如果未传递args [1],则得到java.lang.ArrayIndexOutOfBoundsException:
那么我该如何解决这个问题,在这里我可以检查是否通过了第二次辩论,如果通过了,请输入第二次辩论。 需要尽快提供帮助。
答案 4 :(得分:-2)
您应该检查(args == null || args.length == 0)
。虽然不需要null
检查,但这是一个很好的做法。
答案 5 :(得分:-10)
如果你没有传递任何参数,那么即使在那种情况下,args也会被初始化但没有任何项目/元素。 尝试以下方法,您将获得相同的效果:
public static void main(String[] args) throws InterruptedException {
String [] dummy= new String [] {};
if(dummy[0] == null)
{
System.out.println("Proper Usage is: java program filename");
System.exit(0);
}
}