Java新手,試圖找出如何解決此問題。靜態方法不能引用非靜態方法
boolean myBool = G(A,n,m,0);
由於某種原因,它不是這條線。爲什麼它不讓我稱這個簡單的功能? main()和G()都是類C()的一部分。
Java新手,試圖找出如何解決此問題。靜態方法不能引用非靜態方法
boolean myBool = G(A,n,m,0);
由於某種原因,它不是這條線。爲什麼它不讓我稱這個簡單的功能? main()和G()都是類C()的一部分。
非靜態方法屬於某個類的特定實例,而靜態方法屬於該類本身。在main
裏面,這是一個靜態方法,你不能引用非靜態方法而沒有特定的對象來運行它們。例如: -
boolean myBool = new C().G(A,n,m,0);
但是,如果類沒有有趣的狀態,或者它的狀態不會影響法G
,你應該定義爲G
static
。
我怎麼知道我是否應該定義一個靜態的函數? – user4892642
這兩種方法都奏效。我將G更改爲靜態,並按預期工作。我也嘗試刪除靜態和使用新的C(),這也起作用。 – user4892642
一般經驗法則 - 如果類具有屬於某個實例的數據成員(即該類爲statefull),並且該方法與該狀態相關 - 則不應該是靜態的。否則,使其成爲靜態可能是可以接受的。 – Mureinik
很可能是因爲您沒有在G()
方法的定義中包含static
。
Main()
是一個靜態方法,並且由於static
事物在非靜態事物之前運行,靜態事物只能調用/使用static
事物。
請注意,您的Main()
不需要您製作C
對象。這是程序的入口點,如果您必須首先創建一個對象才能運行程序 - 您將在哪裏創建該對象?
如果要進行非靜態調用,請創建相應類的對象。
該鏈接是一個更復雜的情況,我不明白。這種情況非常簡單,不同。 – user4892642
閱讀有關靜態和正常類變量之間的差異,那麼你會得到它。 – cerkiewny
我懷疑這是在這一行中變化的變量。 – Aify