05.15 Java編程細節——匿名內部類何為匿名?

學過Java的同學肯定聽說過匿名內部類,

不過不知道有沒有仔細的深究過它,

比如為什麼稱之為匿名?

為什麼也算是一個類,而且是內部類?

它和內部類有什麼區別?

匿名內部類

先來看一段匿名內部類的代碼,

這裡需要先定義一個抽象類,

Java編程細節——匿名內部類何為匿名?

大家應該都知道一個典型的匿名內部類是這樣子的,

Java編程細節——匿名內部類何為匿名?

對比與非匿名內部類,

匿名內部類省去了實現一個 Person的具體類的步驟,

比如說上面的代碼可以用這樣的非匿名內部類來實現,

Java編程細節——匿名內部類何為匿名?

匿名內部類的核心

使用匿名內部類,省去了新建一個類的過程。

雖然代碼上看起來少了這個類,但其實在字節碼中,還是有生成一個類的,

比如上面的代碼 Demo類,在編譯後會生成兩個文件,

Demo.class Demo$1.class

可以用

javap -c Demo$1.class

來看看字節碼裡做了什麼

Java編程細節——匿名內部類何為匿名?

可以看到,其實Demo$1就是一個標準的類,

相當於一個 Student類,

雖然我們沒有繼承 Person實現一個具體的類,

可是Java幫我們做了這件事,

如果你的開發經驗足夠豐富的話,有反編譯的經驗,

就會看到在一些jar包裡有大量的12為後綴的class文件,

其實這些都是匿名內部類來著。

所以現在知道匿名跟內部類是什麼意思了吧。

Java編程細節——匿名內部類何為匿名?


分享到:


相關文章: