敲例子的時候無意中把主方法的參數給落下了,當時沒有發現,保存之后就去編譯,運行了,通常情況下編譯沒有錯誤那勝利就在掌握之中了,沒想到這次我竟然在"不一般"的行列中,編譯無誤,運行出錯,錯誤信息如下:
"找不到主方法?記得我寫了main()方法了啊?回到代碼處看了一下,也是static的啊?沒問題啊,算了把錯誤信息拿出來與代碼對照着看吧,發現唯一不一樣的地方就是我的方法中沒有參數, 立刻將參數添進去,編譯,果然能運行了,回頭想想,我也沒傳參啊,為什么還非得把它添進去啊?平時自己寫的方法不都是那樣嗎?需要傳參的時候才寫參數呢? 不需要的時候就不用寫啊,能起到什么作用呢?"這是當時出錯之后我的思考.接下來就去查找資料了,不然不清不楚的以后還得落下,甚至以后每次寫主方法的時 候都得猶豫.
哦,原來是這樣啊,main()方法是Java應用程序的入口方法,也就是說main()方法是程序運行的時候第一個執行方法,這個方法體是被固定的,比 如方法名字必須是main,類型必須是public static void的,方法必須接受一個字符串數組的參數,這個參數主要是為程序使用者在命令行狀態下與程序交互提供的一種手段。
既然是固定的那我就不鑽牛角尖了,寫上就寫上吧,反正也花不了多少時間,但是問題又來了,這個參數是從哪傳來的呢?
想“既然這是程序的入口方法執行時傳遞的參數,那這個參數就該是cmd命令中我在運行程序的時候傳來的。” 去網上驗證一下自己的猜測,還真是這樣的,有一個例子人家說的非常好,主要是大家經常使用,體會比較深吧,人家說使用cmd查找IP時使用的 ipconfig -all,其中all就是參數.
那么為什么這個參數非得是數組呢?什么時候需要傳遞多個參數呢?最簡單的例子就是剛剛學習java時編寫的計算器的小例子了,如下:
"45","+","55"都是參數,這時候數就需要數組啦.
總結:程序的入口方法是規定好的了,程序運行的時候最先執行的就是它,如果你不按規定進行的話,即使方法名字叫做main,編譯的時候不會出現錯誤,運行 的時候程序就找不到入口了,因為這時候會把這個main方法當作普通的方法對待。這個問題雖小,我想多個問題積累起來力量就不可抵擋了,其實解決了這個小 問題以后心里還是寬敞了很多的,相信初學者在敲例子的時候一定想過這些問題,或者你真的沒發生過意外嗎?呵呵
轉載自:http://blog.csdn.net/cjr15233661143/article/details/22073033
看下面的簡單代碼
class Test{
public static void main(String[] args){
if(args.length>0){
for(int i=0;i<args.length;i++){
System.out.println(args[i]);
}
}
}
}
String類型的數組args主要用來接受命令行的參數, 但命令行的參數不包括 java Test 這樣的字符串,如果在命令行輸入 java Test red,那么就會打印出red。
當在命令行輸入參數,執行的時候這個參數就會保存在args這個數組中, 我們就可以用args獲取命令行的這個參數
對於main方法來說,它是由java虛擬機調用的,所以是public
調用的時候不需要產生任何對象,所以聲明為static
main方法是由java虛擬機調用,不需要產生返回值,所以返回類型為void