为什么要测试args.length?

时间:2013-03-01 10:32:23

标签: java

我是Java初学者,我很困惑在许多代码的开头测试args.length,以及为什么在我的任何代码中它永远不会高于0?

import java.net.Socket;
import java.net.UnknownHostException;
import java.io.IOException;

public class LowPortScanner {
public static void main(String[] args) {
String host = "localhost";
if (args.length > 0) {
host = args[0];
}
for (int i = 1; i < 1024; i++) {
try {
Socket s = new Socket(host, i);
System.out.println("There is a server on port " + i + " of "
+ host);
}
catch (UnknownHostException ex) {
System.err.println(ex);
break;
}
catch (IOException ex) {}
} // end for
} // end main
} // end PortScanner

7 个答案:

答案 0 :(得分:1)

您必须从命令提示符输入main方法。

如下所示

java LowPortScanner TEST1 TEST2

答案 1 :(得分:0)

因为如果未经过测试,则会抛出异常,因为host = args[0];是非法的。

然而,这看起来并不会有多大帮助,空洞或null host看起来会导致更多问题。

如果args的长度始终为0,那么请确保您实际上是在传递参数参数。

答案 2 :(得分:0)

如果没有命令参数,args[0]将失败。这就是它必须受到保护的原因。

答案 3 :(得分:0)

这取决于您如何调用Java类文件。在命令提示符或bash shell中:

  

java LowPortScanner Argument1

在命令提示符/ bash中键入以上行将导致参数计数增加到1.(因为Argument1是一个参数,在类文件LowPortScanner之后)

  

java LowPortScanner Argument1 Argument2

上述行将使参数计数增加到2.

因此args.length在第二种情况下为2,在第一种情况下为1

答案 4 :(得分:0)

如果您从CMD或bash调用您的程序,您可以将ARGuments asign as java LowPortScanner google.com

然后“google.com”就是你的args [0]。当您的程序支持命令行属性时,建议测试给定的参数是否相关。

答案 5 :(得分:0)

args中的

public static void main(String[] args是从命令行传递的String参数数组。

java LowPortScanner argument1 argument2

如果您尝试上述命令,args.length将返回2

至于检查长度的问题,对于可以接受命令行参数的java程序,如果没有传递参数,那么它们会提示输入。

if(args.length >0 ){
  //proceed using passed arguments
}else{
   //proceed with some default value
}

您正在使用java LowPortScanner运行程序,因此没有传递任何参数,args.length始终为零。

此外,如果您没有传递任何参数并使用host=args[0],您将获得ArrayIndexOutOfBoundsException

答案 6 :(得分:0)

变量String [] args将所有参数传递给程序通过命令行,如果你没有传递任何参数,则args的长度变为0.现在最好在访问它之前检查它的长度,否则有机会如果它的大小为0

,则获取ArrayIndexOutOfBoundsException