2013-03-01 51 views
0

我是一名Java初學者,對於在許多代碼開始時測試args.length以及爲什麼在我的任何代碼中從未獲得高於0的代碼感到困惑?爲什麼測試args.length?

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 
+2

提供命令行參數和計數將可靠地上升。 – 2013-03-01 10:33:05

回答

0

因爲如果沒有那麼測試它的異常會被拋出,因爲host = args[0];會違法。

但是,這看起來不會有多大幫助,空的或看起來會導致更多問題。

如果args的長度始終爲0,那麼確定您確實在傳遞參數參數。

0

如果沒有命令參數,args[0]將會失敗。這就是爲什麼它必須得到保護。

0

這取決於你如何調用Java類文件。在命令提示或bash殼:

的java LowPortScanner ARGUMENT1

鍵入命令提示上面的行/ bash將導致參數計數增加1。(因爲Argument1是一個參數,後類文件LowPortScanner

的Java LowPortScanner ARGUMENT1 ARGUMENT2

上述行將使參數計數增加到2。

args.length因此將在第二種情況下21在第一種情況。

1

您必須從命令提示符處輸入main方法。

像下面

java LowPortScanner TEST1 TEST2 
0

如果調用CMD從程序或bash,那麼你可以ASIGN參數像
java LowPortScanner google.com

然後 「google.com」 是你ARGS [0]。當你的程序支持命令行屬性時,建議測試給定的參數是否相符。

+0

真的很感謝。它幫助:D – 2013-03-01 10:52:45

0

args in public 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始終爲零程序。

此外,如果您不通過任何參數並使用​​您將獲得ArrayIndexOutOfBoundsException

+0

'提示輸入'是不必要的,它會默認檢查本地主機。 – 2013-03-01 10:37:02

+0

@Aniket謝謝指出:) – kaysush 2013-03-01 10:38:59

+0

謝謝。你的回答真的幫了我:) – 2013-03-01 10:47:11

0

如果你沒有傳遞任何參數,那麼變量String [] args保存所有參數傳遞給程序徹底的命令行,那麼參數的長度變爲0.現在最好在訪問它之前檢查它的長度,如果大小爲0,則有機會獲得ArrayIndexOutOfBoundsException