首先,main
被宣佈爲public static void
由Java Language Specification規定:
方法main
必須聲明public
,static
,和void
。它必須指定一個形式參數(§8.4.1),其聲明類型是String
的數組。
這就是它的方式;沒有它,由於缺少主要方法,Java不會執行你的腳本。
也不要緊哪裏你把它 - 它可能是在類的中間,頂部,底部,或在一個完全不同的文件 - 只要你的程序有一個main
方法來實際運行。
至於static
的含義 - 那麼,這取決於上下文。
作爲一個例子,您將在稍後討論關於Integer.parseInt
;這是一種靜態方法,與Integer
綁定,不需要調用Integer
的實例。
接下來,不要認爲static
方法的聲明對於您的代碼來說是司空見慣的。坦率地說,這代表純程序性編程(即,定義方法來完成這些特定的事情,而不考慮狀態,而不是面向對象的設計,可能或可能不考慮狀態)。
你唯一需要聲明的東西是靜態的,如果你自己在靜態環境中使用它。由於您沒有創建類的實例(通過關鍵字new
),因此您將無法使用您在其中聲明的任何方法。
這不會編譯,因爲main
沒有辦法引用該方法。
public class Foo {
public static void main(String[] args) {
invokeBar();
}
public void invokeBar() {
System.out.println("Yay, bar!");
}
}
的下面將編譯,由於main
確實有一種方法來直接調用該方法:
public class Foo {
public static void main(String[] args) {
invokeBar();
}
public static void invokeBar() {
System.out.println("Yay, bar!");
}
}
稀釋。我現在看到,靜態只是一種說法,'這是這種方法的唯一實例'? – 2014-09-03 22:46:44
記住上下文。如果它是一個字段,那麼該字段只有一個實例。如果它是一個方法,那麼該方法不需要它所附加的對象的一個實例被調用(例如[Integer#parseInt](http://docs.oracle.com/javase/7/)文檔/ API /爪哇/郎/ Integer.html#parseInt函數(java.lang.String中)))。 – Makoto 2014-09-03 23:47:50