為什么需要 public static void main(String[] args) 這個方法?


​      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。見上面講解。
例1:    
//創建Hello.java    
public class Hello    
{    
    public static void main(String[] args)    
    {//args(arguments),類型是String的數組    
    //main的參數,有些人可以也寫成String args[]的形式,我是不建議,String[]這個形式是我推薦的,這個形式,更容易理解    
        System.out.println(args);    
        System.out.println(args.length);    
    
    }    
}    
    
javac Hello.java//編譯    
java Hello//運行    
運行結果:    
[Ljava.lang.String;@15db9742    
//說明這個參數的值是不空的    
0    
//說明傳遞了空數組過來    
    
例2:    
//創建Hello2.java    
public class Hello2    
{    
    public static void main(String[] args)    
    {//args(arguments),類型是String的數組    
        System.out.println(args.length);    
        for(int index=0;index<args.length;index ++)    
        {    
            System.out.println(args(index));    
        }    
    
    }    
}    
    
javac Hello2.java//編譯    
java Hello2 A//運行    
運行結果:    
1    
A    
    
例3:    
//創建Hello2.java    
public class Hello2    
{    
    public static void main(String[] args)    
    {//args(arguments),類型是String的數組    
        System.out.println(args.length);    
        for(int index=0;index<args.length;index ++)    
        {    
            System.out.println(args(index));    
        }    
    
    }    
}    
    
javac Hello2.java//編譯    
java Hello2 A B C D E//運行    
運行結果:    
5    
A    
B    
C    
D    
E    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM