我想为我的命令行参数做一些错误检查
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),这显然是一个非常不寻常的用例,and 这是对
main
入口点方法的隐含合同的严重违反。因此,我认为您不应该费心检查 null
中的 main
参数值。万一它们确实发生了,调用代码获得 NullPointerException
是可以接受的。毕竟是调用方的bug违约了
扩展这一点:
args 变量本身可能为空,但不是通过正常执行。正常执行将使用
java.exe
作为命令行的入口点。然而,我看到一些程序使用编译过的C++
代码和JNI来使用jvm.dll
,完全绕过java.exe。在这种情况下,可以将 NULL
传递给 main 方法,在这种情况下 args 将为空。
我建议根据您的需要始终检查
if ((args == null) || (args.length == 0))
,或if ((args != null) && (args.length > 0))
。
你应该检查
(args == null || args.length == 0)
。虽然 null
检查并不是真正需要的,但这是一个很好的做法。
如果我想检查是否通过了命令行参数的任何特定位置,那么如何检查? 比如说 在某些情况下,将传递 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:
那么我该如何解决这个问题,我可以检查第二个争论是否通过,如果通过则输入它。 尽快需要帮助。
如果你不传递任何参数,那么即使在这种情况下,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);
}
}