1. 程式人生 > >Java的static方法為什麼不允許直接使用非static的變數

Java的static方法為什麼不允許直接使用非static的變數

在學習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檔案所對應。