1. 程式人生 > >Java-為什麼非靜態內部類裡面不能定義靜態方法、靜態成員變數、靜態初始化塊?

Java-為什麼非靜態內部類裡面不能定義靜態方法、靜態成員變數、靜態初始化塊?

首先要明確一點:

static修飾方法、成員變數是屬於類自己的。並不屬於特定的某個物件。所以我們可以像這樣使用static修飾的方法、變數:ClassName.methodName、ClassName.variable,而不用先new一個Class出來。通過new出來的物件就是特定的某一個物件。所以還有這麼一說,不能在靜態方法內使用非靜態的成員變數,因為這個成員變數不是類自己的,而是某一個物件的,你不能確定在使用這個成員變數的時候這個物件存在。

解釋為什麼非靜態內部類裡面不能定義靜態方法、靜態成員變數靜態初始化塊

理解了上面對static的說明,就不難回答這個問題。首先要使用非靜態內部類

就必須要先new一個這個非靜態內部類的物件出來,既然都new出了一個具體的物件,就沒必要再使用static修飾裡面的方法和成員了,這是正常的思考方式。當然更為正確解釋的應該是:使用靜態方法不用new物件,但是使用非靜態內部類又必須要new一個物件,這就自相矛盾了。