Java:检查命令行参数是否为null

时间:2010-10-06 01:09:48

标签: java command-line command-line-arguments

我希望对我的命令行参数进行一些错误检查

public static void main(String[] args)
{
    if(args[0] == null)
    {
        System.out.println("Proper Usage is: java program filename");
        System.exit(0);
    }
}

但是,这会返回一个数组越界异常,这是有道理的。我只是在寻找正确的用法。

6 个答案:

答案 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)

在大多数情况下,@ jjnguy的回答是正确的。如果通过运行应用程序调用{​​{1}}以正常方式从命令行运行,您将永远不会在参数数组(或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);
        }

    }