2013-01-05 84 views
0

我怎樣才能調用非靜態方法主要class.I我得到如下因素的錯誤在我的示例控制檯應用程序異常在線程「主」了java.lang.RuntimeException:不可編譯源代碼

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - non-static method doSomthing() cannot be referenced from a static context 
     at sample.Main.main(Main.java:20) 

和代碼是,

public class Main { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     doSomthing(); 
     System.out.print("From Main"); 
    } 

    protected void doSomthing() 
    { 
     System.out.print("From Main doSomthing"); 
    } 


} 
+0

爲什麼要從靜態方法調用非靜態方法? – MrSmith42

回答

4

問題是您已經使用未在Java允許的靜態方法的非靜態方法,更改doSomthing()作爲靜態方法

protected static void doSomthing() 
{ 
    System.out.print("From Main doSomthing"); 
} 

或創建主類的對象,並調用它

public static void main(String[] args) { 
    Main myMain = new Main(); 
    myMain.doSomthing(); 
    System.out.print("From Main"); 
} 
+0

thanks.so在控制檯應用程序中,所有方法都應該是靜態的。是嗎? – user1869132

+0

您可以創建該類的對象並調用您的方法並不總是應該是靜態的。 – Suranga

+0

感謝您的回答。 – user1869132

2

您可以創建一個實例首先從staticmain方法:

new Main().doSomthing(); 
+0

感謝您的回答。 – user1869132

2

你不能叫非靜態方法在主類中,除非你實例化一個[Main class]。

+0

或者你可以改變方法爲靜態 – Suranga

+0

作者問「調用非靜態方法」 –

+0

謝謝你的答案。 – user1869132

2
public class Main { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     Main main = new Main(); 
     main.doSomthing(); 
     System.out.print("From Main"); 
    } 

    protected void doSomthing() 
    { 
     System.out.print("From Main doSomthing"); 
    } 
} 
+0

感謝您的回答。 – user1869132

相關問題