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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java:检查命令行参数是否为null相关的知识,希望对你有一定的参考价值。

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

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

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

答案

争论永远不会是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);
    }
}
另一答案

在大多数情况下,@ jjnguy的答案是正确的。如果通过运行应用程序调用null以正常方式从命令行运行,您将永远不会在参数数组(或null数组)中看到main字符串。

但是,如果应用程序的某些其他部分调用main方法,则可以想象它可能会传递null参数或null参数数组。

然而(2),这显然是一个非常不寻常的用例,并且它严重违反了main入口点方法的隐含合同。因此,我认为你不应该在null中检查main参数值。万一它们确实发生,调用代码可以接受NullPointerException。毕竟,调用者违反合同是一个错误。

另一答案

为了扩展这一点:

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

另一答案

你应该检查(args == null || args.length == 0)。虽然不需要null检查,但这是一个很好的做法。

另一答案

如果你没有传递任何参数,那么即使在那种情况下,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);
        }

    }

以上是关于Java:检查命令行参数是否为null的主要内容,如果未能解决你的问题,请参考以下文章

我们是不是应该总是在第一行检查java中方法的每个参数是不是为null?

如何检查命令行参数是不是为整数

检查java中是不是存在文件

shell getopts命令

java基础3-重载+命令行传参+递归+数组+排序

片段(Java) | 机试题+算法思路+考点+代码解析 2023