1. 程式人生 > >關於成員內部類不能有static修飾的變數和方法問題

關於成員內部類不能有static修飾的變數和方法問題

看了幾篇部落格關於一般內部類不能有static修飾的變數,在這裡記錄一下。

問題幾種解釋如下:

1.

“if you're going to have a static method, the whole inner class has to be static. Without doing that, you couldn't guarantee that the inner class existed when you attempted to call the static method. ”

如果內部類沒有static的話,就需要例項化內部類才能呼叫,說明非static的內部類不是自動跟隨外部類載入的,而是被例項化的時候才會載入。

而static的語義,就是外部類能直接通過內部類名來訪問內部類中的static方法,而非static的內部類又是不會自動載入的,所以這時候內部類也要static,否則會前後衝突。

2.

非static的內部類,在外部類載入的時候,並不會載入它,所以它裡面不能有靜態變數或者靜態方法。
1、static型別的屬性和方法,在類載入的時候就會存在於記憶體中。
2、要使用某個類的static屬性或者方法,那麼這個類必須要載入到jvm中。
基於以上兩點,可以看出,如果一個非static的內部類如果具有static的屬性或者方法,那麼就會出現一種情況:內部類未載入,但是卻試圖在記憶體中建立static的屬性和方法,這當然是錯誤的。原因:類還不存在,但卻希望操作它的屬性和方法。