我是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
答案 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