Java:检查命令行参数是不是为空

Posted

技术标签:

【中文标题】Java:检查命令行参数是不是为空【英文标题】:Java: Check if command line arguments are nullJava:检查命令行参数是否为空 【发布时间】:2011-04-21 14:21:26 【问题描述】:

我正在为我的命令行参数做一些错误检查

public static void main(String[] args)

    if(args[0] == null)
    
        System.out.println("Proper Usage is: java program filename");
        System.exit(0);
    

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

【问题讨论】:

【参考方案1】:

参数永远不能是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);
    

【讨论】:

【参考方案2】:

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

【讨论】:

这是完全错误的。如果应用程序在没有命令行参数的情况下启动,则将使用长度为零的 args 数组调用 main 方法。 @Stephen 一个内部没有任何元素的数组,长度为零。那我的回答有什么问题呢? @Puspendu - 问题是dummy[0] 抛出数组索引越界异常!!如果您将程序(返回)更改为测试 args[0] 并在不带参数的情况下运行它,则同上。 好的 - 我现在明白了。如果您没有打错第一句话,那会有所帮助。正如所写,它是难以理解的。我注意到你在上一条评论中悄悄地纠正了它。偷偷摸摸。 “我没有给出任何解决方案,而是试图描述这个问题”。然后不要发布答案。发表评论。【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

不必要的检查不是好的做法。 null 检查是不必要的,但你是正确的 length 检查是必要的,【参考方案5】:

在这一点上展开:

args 变量本身可能为空,但不是通过正常执行。正常执行将使用java.exe 作为命令行的入口点。但是,我看到一些程序使用 JNI 编译的 C++ 代码来使用 jvm.dll,完全绕过 java.exe。在这种情况下,可以将 NULL 传递给 main 方法,在这种情况下,args 将为空。

我建议您根据需要始终检查if ((args == null) || (args.length == 0))if ((args != null) && (args.length > 0))

【讨论】:

【参考方案6】:

如果我想检查命令行参数的任何特定位置是否通过,那么如何检查? 例如 在某些情况下会传递 2 个命令行参数,而在某些情况下只会传递一个,那么它如何检查是否通过了特定的命令行?

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:

那么我该如何解决这个问题,我可以检查第二次争论是否通过,如果通过然后输入。 需要尽快帮助。

【讨论】:

请提出这个问题。因为它不回答问题,所以它不属于这里。通过提出问题,您有更好的机会获得答案。

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

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

创建一个shell,检查命令行参数个数,如果参数不是三个,则显示一条错误信息

curl命令行参数及使用

java命令行参数的默认访问修饰符是啥[关闭]

如何检查“.bat”文件中的命令行参数?

破折号和参数是不是有任何标准的命令行约定? [复制]