2011-01-12 44 views
8
String name = "Marcus"; 
static String s_name = "Peter"; 

public static void main(String[] args) {  
    System.out.println(name);//ERROR 
    System.out.println(s_name);//OK 
} 

錯誤:無法使靜態參考非靜態字段名爲什麼在從main讀取非靜態變量時會出現問題?

+0

同樣的問題與非靜態方法。見http://stackoverflow.com/questions/ 2042813 /調用非靜態方法在java中的靜態方法 – dkarp

回答

6

原因這導致的問題在於,main是一個靜態方法,這意味着,它沒有接收器對象。換句話說,它不會相對於某個對象進行操作。因此,如果您嘗試查找非靜態字段,那麼Java會對該字段所在的對象感到困惑。通常,它會假定該字段位於正在調用該方法的對象中,但由於main是靜態的對象不存在。

作爲一般規則,您不能從靜態方法訪問常規實例變量。

+0

從技術上講,你正在操作的對象是類本身,我也不會說這是一個通用的規則...我' d說這是一條規則 –

+0

我也不會說Java會'迷惑',沒有什麼可以混淆的,沒有實例對象,Period。因此沒有辦法訪問實例字段 – EJP

2

要訪問非靜態成員變量和函數,必須有一個特定的對象。 (例如,如果所有在裏面class Bob { ... },你需要做的是這樣

Bob bob = new Bob(); 
System.out.println(bob.name); 

裏面你的主。

+0

(感謝編輯,看來我已經寫了最近有太多紅寶石。) – Matt

相關問題