public staticvoid main(string[] args)為java程式的入口方法,jvm在運作程式的時候,會首先查找main方法。其中,public是權限修飾符,表明任何類或對象都可以通路這個方法,static表明main方法是一個靜态方法,即方法中的代碼是存儲在靜态存儲區的,隻要類被加載後,就可以使用該方法而不需要通過執行個體化對象來通路,可以直接通過類名.main()直接通路,jvm在啟動的時候就是按照上述方法的簽名(必須有public與static修飾,傳回值為void,且方法的參數為字元串數組)來查找方法的入口位址,如果能找到就執行,找不到則會報錯。void表明方法沒有傳回值,main是jvm識别的特殊方法名,是程式的入口方法。字元串數組參數args為開發人員在指令行狀态下與程式互動提供了一種手段。
因為main為程式的入口方法,是以當程式運作的時候,第一個執行的方法就是main方法。通常來講,要執行一個類的方法,首先必須執行個體化一個類的對象,然後通過對象來調用這個方法。但是由于main是程式的入口方法,此時還沒有執行個體化對象,是以在編寫main方法的時候就要求不需要執行個體化對象就可以調用這個方法,鑒于此,main方法需要被定義成public與static。下例給出了在調用main方法時傳遞參數的方法。
public class test{
public static void main(string[] args){
for(int i=0;i<args.length;i++){
system.out.println(args[i]);
}
}
}
在控制台下,使用javac test.java指令編譯上述程式,使用javatest arg1 arg2 arg3指令運作程式,程式輸出結果如下所示。
arg1
arg2
arg3
引申:
(1)main方法是否還有其它可用的定義格式?
1)由于public與static沒有先後順序關系,由此下面的定義也是合理的:
static public void main(string[] args)
2)也可以把main方法定義為final:
public static final void main(string[]args)
3)也可以用synchronized來修飾main方法:
static public synchronized voidmain(string[] args)
不管哪種定義方式,都必須保證main方法的傳回值為void,有static與public關鍵字修飾。同時由于main方法為程式的入口方法,是以不能用abstract關鍵字來修飾。
(2)同一個.java檔案中是否可以有多個main方法?
雖然每個類中都可以定義main方法,但是隻有與檔案名相同的用public修飾的類中的main方法才能作為整個程式的入口方法。如下例所示,建立了一個名為test.java的檔案。
class t{
public static void main(string[] args) {
system.out.println("t main");
}
public class test {
// 程式入口函數
public static void main(string[] args) {
system.out.println("test main");
程式運作結果為:
test main
常見筆試題:
java程式中程式運作入口方法main的簽名正确的有( )
a:publicstatic void main(string[] args) b:publicstatic final void main(string[] args)
c:staticpublic void main(string[] args) d:staticpublic synchronized void main(string[] args)
e:staticpublic abstract void main(string[] args)
答案: a、b、c、d。見上面講解。
出自