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则在参数数组(或数组)中将不会看到nullstring。

但是,如果应用程序的某些其他部分调用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); } }