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讀取非靜態變量時會出現問題?
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讀取非靜態變量時會出現問題?
原因這導致的問題在於,main
是一個靜態方法,這意味着,它沒有接收器對象。換句話說,它不會相對於某個對象進行操作。因此,如果您嘗試查找非靜態字段,那麼Java會對該字段所在的對象感到困惑。通常,它會假定該字段位於正在調用該方法的對象中,但由於main
是靜態的對象不存在。
作爲一般規則,您不能從靜態方法訪問常規實例變量。
從技術上講,你正在操作的對象是類本身,我也不會說這是一個通用的規則...我' d說這是一條規則 –
我也不會說Java會'迷惑',沒有什麼可以混淆的,沒有實例對象,Period。因此沒有辦法訪問實例字段 – EJP
要訪問非靜態成員變量和函數,必須有一個特定的對象。 (例如,如果所有在裏面class Bob { ... }
,你需要做的是這樣
Bob bob = new Bob();
System.out.println(bob.name);
裏面你的主。
(感謝編輯,看來我已經寫了最近有太多紅寶石。) – Matt
同樣的問題與非靜態方法。見http://stackoverflow.com/questions/ 2042813 /調用非靜態方法在java中的靜態方法 – dkarp