Java的static方法為什麼不允許直接使用非static的變數
阿新 • • 發佈:2019-01-25
在學習java時我們都知道:
1. 非靜態方法可以訪問類中非static和static的變數
2.靜態方法只能直接訪問靜態變數
例如:
<span style="font-family:Courier New;font-size:14px;">public class Test { private static String name = "wahaha"; private int age = 20; public void testNoStaticMethod() { System.out.println(name); } public static void testStaticMethod(){ System.out.println(name); } public static void main(String[] args) { System.out.println(name); System.out.println(new Test().age); } }</span>
上面所說的情況對應以上程式碼的testNoStaticMethod()和testStaticMethod()方法。
如果我們在testStaticMethod()方法中列印age 編譯器則會報錯,但是我們看到在main()方法中卻能訪問到age。為、i什麼會這樣呢?
其實這個問題不難解釋,被static修飾的Fiels和Method是屬於某個類的Class物件的,不屬於該類的某個例項,被類的多個例項所共享。我們都知道,一個類不管有多少個例項,但只有唯一的一個Class物件和class檔案所對應。