0

我是一名 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
4

7 回答 7

1

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

像下面

java LowPortScanner TEST1 TEST2
于 2013-03-01T10:35:40.493 回答
0

If there are no command arguments the args[0] will fail. This is why it must be protected.

于 2013-03-01T10:34:19.207 回答
0

It depends on how you invoke the Java class file. In command prompt or bash shell:

java LowPortScanner Argument1

typing the above line in the command prompt/bash will cause the argument count to increase to 1. (because Argument1 is one argument, after the class file LowPortScanner)

java LowPortScanner Argument1 Argument2

the above line will make argument count to increase to 2.

hence args.length will be 2 in the second case and 1 in the first case.

于 2013-03-01T10:34:51.930 回答
0

如果你从 CMD 或 bash 调用你的程序,你可以像这样分配 ARGuments
java LowPortScanner google.com

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

于 2013-03-01T10:36:09.400 回答
0

argsinpublic static void main(String[] argsString从命令行传递的参数数组。

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.

于 2013-03-01T10:36:37.900 回答
0

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

于 2013-03-01T10:38:03.387 回答
0

因为如果不对其进行测试,则会抛出异常,因为host = args[0];这是非法的。

但是,这看起来并没有多大帮助,一个空的或null host看起来会导致进一步的问题。

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

于 2013-03-01T10:33:42.923 回答