2015-05-12 141 views
-3

Java新手,試圖找出如何解決此問題。靜態方法不能引用非靜態方法

 boolean myBool = G(A,n,m,0); 

由於某種原因,它不是這條線。爲什麼它不讓我稱這個簡單的功能? main()和G()都是類C()的一部分。

+0

該鏈接是一個更復雜的情況,我不明白。這種情況非常簡單,不同。 – user4892642

+0

閱讀有關靜態和正常類變量之間的差異,那麼你會得到它。 – cerkiewny

+0

我懷疑這是在這一行中變化的變量。 – Aify

回答

0

非靜態方法屬於某個類的特定實例,而靜態方法屬於該類本身。在main裏面,這是一個靜態方法,你不能引用非靜態方法而沒有特定的對象來運行它們。例如: -

boolean myBool = new C().G(A,n,m,0); 

但是,如果類沒有有趣的狀態,或者它的狀態不會影響法G,你應該定義爲Gstatic

+0

我怎麼知道我是否應該定義一個靜態的函數? – user4892642

+0

這兩種方法都奏效。我將G更改爲靜態,並按預期工作。我也嘗試刪除靜態和使用新的C(),這也起作用。 – user4892642

+0

一般經驗法則 - 如果類具有屬於某個實例的數據成員(即該類爲statefull),並且該方法與該狀態相關 - 則不應該是靜態的。否則,使其成爲靜態可能是可以接受的。 – Mureinik

0

很可能是因爲您沒有在G()方法的定義中包含static

Main()是一個靜態方法,並且由於static事物在非靜態事物之前運行,靜態事物只能調用/使用static事物。

請注意,您的Main()不需要您製作C對象。這是程序的入口點,如果您必須首先創建一個對象才能運行程序 - 您將在哪裏創建該對象?

如果要進行非靜態調用,請創建相應類的對象。

+0

靜態是什麼意思?沒有改變? – user4892642

+0

它屬於類,而不是該類的對象。 – Aify

+0

聽起來很政治 – user4892642

相關問題