2014-09-03 73 views
0

我在我的高中有一個計算機編程-K課程,我們使用Java作爲我們的語言。我注意到你似乎需要在每個腳本的開頭都有public *static* void main(String[] args)。我們的主要結構是這樣的:爲什麼需要從其他靜態空隙調用靜態空隙?

public class 
    (void main() 
    void input() 
    void process() 
    void output()) 

而且我們必須讓所有的void方法靜態的,要能夠相互調用,因爲我們不能使用非靜態爲主。爲什麼? Java中的靜態意味着什麼?

回答

0

首先,main被宣佈爲public static voidJava Language Specification規定:

方法main必須聲明publicstatic,和void。它必須指定一個形式參數(§8.4.1),其聲明類型是String的數組。

這就是它的方式;沒有它,由於缺少主要方法,Java不會執行你的腳本。

也不要緊哪裏你把它 - 它可能是在類的中間,頂部,底部,或在一個完全不同的文件 - 只要你的程序有一個main方法來實際運行。

至於static的含義 - 那麼,這取決於上下文。

  • 如果你在現場使用static(即包含在一個類中的變量),那麼就會有only ever be one instance of that field

  • 如果你在一個方法使用static(如main,或另一種方法),那麼這是一個class method,並且不需要對象的實例,它被調用和使用。這些特定的方法不應該依賴於它們被調用的類的內部狀態。

作爲一個例子,您將在稍後討論關於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!"); 
    } 
} 
+0

稀釋。我現在看到,靜態只是一種說法,'這是這種方法的唯一實例'? – 2014-09-03 22:46:44

+0

記住上下文。如果它是一個字段,那麼該字段只有一個實例。如果它是一個方法,那麼該方法不需要它所附加的對象的一個​​實例被調用(例如[Integer#parseInt](http://docs.oracle.com/javase/7/)文檔/ API /爪哇/郎/ Integer.html#parseInt函數(java.lang.String中)))。 – Makoto 2014-09-03 23:47:50

0

靜態意味着你不需要有一個類的實例來調用該方法。

static void main只是Java需要的特定功能,因此它知道從哪裏開始運行代碼。每個程序都必須包含一個,並且只有一個,即static void main

0

我注意到你似乎需要在每個腳本的開頭都有'public static void main(String [] args)''。

原因是,當JVM運行你的程序時,它需要能夠運行它而不需要創建一個包含main方法的入口類的實例。有時你的包含main方法的類可能有構造函數需要參數來創建它的一個實例,那麼JVM如何知道它必須通過什麼值才能創建它自己的實例,這就是爲什麼java會迫使你主要因此JVM不需要擔心創建主類的實例來調用作爲應用程序入口點的主方法。

我們必須讓所有空隙靜態

這是一個不正確的假設。你不需要使你的void方法成爲靜態方法。有兩種通過類的對象(這些方法稱爲實例方法)或通過類變量(名稱)調用方法(這些方法稱爲靜態方法)。如果你不想讓你的方法成爲靜態的,那麼你需要創建一個類實例來調用你的方法。

Java中的靜態意味着什麼? static是Java中的修飾符。您可以將它用於實例變量或方法或內部類。此關鍵字使資源(實例變量/方法/內部類)成爲基礎類的一個屬性,因此在類的所有實例(對象)之間共享。