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:检查命令行参数是不是为空的主要内容,如果未能解决你的问题,请参考以下文章