2012-11-19 19 views
0

當我試圖構建這個程序時,總是有一個錯誤,如「非靜態方法引用靜態上下文」 我認爲,因爲我可以在「main」中使用「addto」函數。那我該如何解決這個問題呢?我需要一個公共數組列表,因爲我必須在「addto」中進行計算。如何避免java中的「從靜態上下文引用的非靜態方法」?真的很簡單

Thx!

public class Calculation { 
    ArrayList<int[]> cal = new ArrayList<>(); 

    public static void main(String[] args) { 
    System.out.println(addto(3,5)); 
    } 

    String addto(int figone, int figtwo){ 
    ........do the calculations by using arraylist cal 
    } 
} 
+1

您需要一個'Calculation'實例來調用非靜態方法'addto' – mre

回答

1

真的很簡單嗎?

System.out.println(new Calculation().addto(3,5)); 

Calculation calculation = new Calculation(); 
System.out.println(calculation.addto(3,5)); 
// and use 'calculation' some more ... 

(你也可以添加一個static修改器addto方法聲明,但隨後你需要做cal靜電過這樣addto可以使用它。壞主意。)


好的。那麼編譯方法實際上說的是addto被聲明爲一個實例方法......但是你正試圖調用它,而不用說哪個實例要使用。事實上,你正試圖將它稱爲靜態方法。

「修復」(見上文)是創建一個實例並調用該方法。

+0

是:'System.out.println(new Calculation()。addto(3,5));'。否:'或者向addto方法聲明添加一個靜態修飾符。除非你還*使「cal」靜態。你的第一個建議是最好的:) – paulsm4

+0

@ paulsm4 - 我已經注意到... –

+0

幫助很多謝謝 – user1822020

4

您需要實例主函數中的計算對象,以使用計算的非靜態方法。

非靜態方法只存在於對象的成員中(您可以將其視爲類的實例)。爲了使這項工作,你需要寫:

System.out.println(new Calculation().addto(3, 5)) 
+0

謝謝!有用! – user1822020

相關問題