我想对我的命令行参数进行一些错误检查
public static void main(String[] args)
{
if(args[0] == null)
{
System.out.println("Proper Usage is: java program filename");
System.exit(0);
}
}
但是,这会返回一个数组越界异常,这是有道理的。我只是在寻找正确的用法。
我想对我的命令行参数进行一些错误检查
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
方法,那么可能会传递null
参数或null
参数数组。
然而(2),这显然是一个非常不寻常的用例,同时也是对main
入口点方法的隐含约定的严重违反。因此,我认为您不应该费心在main
中检查null
参数值。如果它们确实发生了,呼叫代码收到NullPointerException
是可以接受的。毕竟,违反合同是调用方的错误。
进一步阐述这一点:
虽然正常执行不会导致args变量本身为空,但是通过使用java.exe
作为命令行的入口点。然而,我见过一些程序使用编译的C++
代码和JNI来使用jvm.dll
,完全绕过了java.exe。在这种情况下,有可能将NULL
传递给主方法,此时args将为空。
建议始终检查if ((args == null) || (args.length == 0))
,或者根据您的需要检查if ((args != null) && (args.length > 0))
。
(args == null || args.length == 0)
。虽然 null
检查并不是必须的,但这是一个好习惯。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("正确的用法是:java程序文件名");
System.exit(0);
}
}
main
方法将被调用,并且其args
数组的长度为零。 - Stephen C
null
检查是不必要的,但你是正确的,length
检查是必要的。 - Stephen C