Java:检查命令行参数是否为空
我正在寻找做一些错误检查我的命令行参数
public static void main(String[] args) { if(args[0] == null) { System.out.println("Proper Usage is: java program filename"); System.exit(0); } }
但是,这将返回一个数组超出范围的exception,这是有道理的。 我只是在寻找正确的用法。
参数不能为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的答案在大多数情况下是正确的。 如果通过运行应用程序以正常方式从命令行运行来调用main
则在参数数组(或数组)中将不会看到null
string。
但是,如果应用程序的某些其他部分调用main
方法,则可以设想它可以传递一个null
参数或null
参数数组。 这显然是一个非常不寻常的用例, 并且违反了隐含的main
入口点方法的合同。 因此,我不认为你应该检查null
值。 在不太可能发生的情况下,我会说调用代码可以接受NullPointerException
。
为了扩大这一点:
argsvariables本身可能是空的,但不能通过正常的执行。 正常执行将使用java.exe
作为命令行的入口点。 不过,我已经看到一些使用JNI编译的C++
代码的程序使用jvm.dll
,完全绕过了java.exe。 在这种情况下,可以将NULL
传递给主方法,在这种情况下,args将为空。
我build议总是检查if ((args == null) || (args.length == 0))
,或者if ((args != null) && (args.length > 0))
取决于您的需要。
你应该检查(args == null || args.length == 0)
。 虽然null
检不是真的需要,但这是一个很好的做法。
如果你不传递任何参数,那么即使在这种情况下,参数初始化,但没有任何项目/元素。 尝试下面的一个,你会得到同样的效果 :
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); } }
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); } }