2014-04-18 84 views
-1

我已經瞭解到字段就像全局變量,可以通過同一類中的方法訪問。我之前就這樣做過,從來沒有遇到過問題。我現在有一個類,我有一些領域,但方法不能訪問他們,而不必使他們成爲靜態字段。我得到錯誤「不能靜態引用非靜態...」 我認爲靜態是訪問其他類上的字段,而不必創建一個對象引用類。與此代碼唯一的區別是,我有這個類中的一個類和我的main()方法。這個類中有main()是否有所作爲?Java中的靜態字段

+0

您可以發佈您的代碼,並指出問題出在哪裏?靜態數據意味着它與類關聯,而不是類的特定*實例*。 –

+0

通過閱讀理論,假設代碼和問題非常困難。 – Gundamaiah

回答

0

對於類本身,靜態成員只存在一次,而不是每個類的實例都不同的常規類成員。

擁有main()方法不會影響靜態成員的行爲,但靜態方法只能訪問靜態成員,而非靜態方法可以訪問靜態和非靜態類成員。

+0

謝謝,我犯了使我的方法變爲靜態的錯誤。這就是導致這個問題的原因。 – polaris

+0

「靜態方法只能訪問靜態成員」 - 不完全正確;爲了訪問***實例***成員,您必須將它們作爲參數傳遞給對象引用。雖然有合法的用例,但這種方法應該是一種實例方法(也許應該在這種情況下重新構建),這是一種設計氣味。 –

+1

@LawrenceDol是的,但是由於提問者的問題範圍和隱含的經驗水平,這太過於迂腐了。 – caskey

0

您無法訪問靜態方法內的非靜態實例。我認爲你是在試圖訪問直接main方法裏面類變量,即

class A 
{ 
int x; 

main() method 
{ 
x;//Not accessible here,, create instance of class and access it.like 
A a=new A(); 
a.x; 
} 
} 
0

靜態(方法,變量,類等)屬於類不類的特定實例。當行爲或狀態不依賴於類的任何特定實例時,我們將其定義爲靜態。例如「生成一個隨機數」它不依賴於實例,它總是生成一個數字,不管實例如何,這種行爲可以定義爲靜態。

關於錯誤,發佈您的代碼將有助於提供更好的解決方案。

請參考以下鏈接瞭解更多關於靜態和非靜態

http://javarevisited.blogspot.in/2012/02/why-non-static-variable-cannot-be.html