2011-11-14 57 views
14

我是java的總noob,但在今天練習時,我發現在OOP設計中,主類中的每種方法都必須是靜態的嗎?在這段代碼中,我無法調用類中不是靜態的方法。這似乎也許我錯過了爲什麼要聲明一個類是靜態的。謝謝你的幫助!主類中的每個方法都必須是靜態的嗎?

public class JavaApplication2 { 

private static CreateCar Vroom; 
private static Limo Fuuu; 

public static void main(String[] args) { 
    Vroom = new CreateCar(); 
    Vroom.creator(); 
    getGas(); 
    addGas(); 
    getGas(); 
    Fuuu = new Limo(); 
    Fuuu.creator(); 
    Fuuu.wheels = 5; 
    Fuuu.wheelie(); 
} 
public static int getGas(){ 
    Vroom.returnGas(); 
    return 0; 
} 
public static void addGas(){ 
    Vroom.fillerUp(); 
} 
} 

回答

33

你可以調用非靜態方法,但是你只能通過一個對象來完成。也就是說,你需要調用給定對象的方法。

您的主類也可以實例化,因此並非主類中的每個方法都需要是靜態的。 例如:

public class MainClass { 
    int value; 

    public void printValue() { 
     System.out.println("" + value); 
    } 

    public static void main(String[] args){ 
     MainClass o = new MainClass(); 
     o.printValue(); 
    } 
} 
+1

謝謝你,簡潔而且非常有幫助。 – Zombian

+0

謝謝你,這個答案一直在尋找。 –

+0

什麼是更好的方法來做到這一點,實例化其中的類或只是聲明所有的方法爲靜態?您忘記提及的 –

2

呃,你沒有「靜態Main」類。您的JavaApplication2課程中有一個名爲main的靜態方法。

沒有要求在該類中有任何其他靜態方法。要使用這個類,你實例化它:

public static void main(String[] args) 
{ 
    JavaApplication2 myApp = new JavaApplication2(); 
    myApp.someMethod(); 
    ... 
} 

main是作爲切入點,明確指定靜態方法。當你告訴Java從像在命令行中「運行」程序:

的Java JavaApplication2

的JVM調用JavaApplication2.main()通過在命令行參數。

+0

啊!感謝您的更正,您是對的。 – Zombian

3

簡答:是的。

原因是您的JVM需要調用您的類「主」「」,而不依賴於已經具有該類的任何現有實例

次要語義挑選:「main」是一個類的成員(靜態成員)它不是這個類本身的名字。

有用的提示:每個類可以有它OWN不同 「主()」。這對單元測試單個類非常有用。

有時,這是作爲一個衝擊C/C++程序員,其中,「主要()」與「.EXE」有關,你只會讓他們的一個。在java中,你可以有許多「main()」方法,並且可以在運行時調用你選擇的任何一個。

+0

+1對於C/C++程序員來說有時會是一種衝擊,其中「main()」與「.exe」關聯,並且你只能擁有其中的一個...... – CoolEulerProject

7

否。但main方法必須是static

要調用的類中的非靜態方法,你必須創建一個參考類的對象。然後你從參考中調用該方法。

public class JavaApplication2 { 
    // non-static method 
    public void go() { 
     System.out.println("hello"); 
    } 

    public static void main(String[] args) { 
     // declare a reference 
     JavaApplication2 app; 
     // create an object 
     app = new JavaApplication2(); 
     // call a method 
     app.go(); 
    } 
} 
+0

這個解釋也很有幫助。謝謝! – Zombian

0

簡答:不,每種方法都不需要是靜態的。

事實上:

  1. 的小練習,最好是沒有爲你的主要方法不同的類。
  2. 你可以有多個主要方法的類(很多庫中很常見,用於測試或演示類的使用)
  3. 當你調用一個java程序時,通常是一個jar文件,你可以選擇除非您確定需要它們,否則作爲初學者,您希望調用哪個類的主要方法
  4. 嘗試避免靜態方法。這是因爲有人不擅長面向對象編程可以很容易地濫用靜態方法通過使用靜態方法來執行面向函數的編程(不要與函數式編程混淆)。
  5. 主要方法(注意,我不是說「中的」主要方法)必須是靜態的:public static void main (String [] argv) { /* ... */ }
0

方法聲明爲靜態的,以便通過類名被稱爲... 如

Math.pow(x,y) // x^y 

在這種方法中調用用戶不必擔心實例創建...爲數學有它的所有方法,靜態所以這就是爲什麼使用靜態方法的根本原因....

靜態方法可以調用非靜態方法雖然類的對象

ClassName cn =new ClassNam().methodName; 

主()是特殊的方法,該程序的執行的開始點,所以在哪裏都具有一個對象不運行該程序,並因此它被稱爲像(執行:: Java類名),所以它必須是靜態的......

0

靜態方法意味着你可以直接調用它通過

public class ClassName{ 
    //no-op 
    public static void method(){//....} 
}  
ClassName.method(); 

而且,在某些情況下,可以ClassName被省略,例如。

static import 

main method 

但是要調用非靜態方法,您必須先啓動它。

相關問題