學過Java的同學肯定聽說過匿名內部類,
不過不知道有沒有仔細的深究過它,
比如為什麼稱之為匿名?
為什麼也算是一個類,而且是內部類?
它和內部類有什麼區別?
匿名內部類
先來看一段匿名內部類的代碼,
這裡需要先定義一個抽象類,
大家應該都知道一個典型的匿名內部類是這樣子的,
對比與非匿名內部類,
匿名內部類省去了實現一個 Person的具體類的步驟,
比如說上面的代碼可以用這樣的非匿名內部類來實現,
匿名內部類的核心
使用匿名內部類,省去了新建一個類的過程。
雖然代碼上看起來少了這個類,但其實在字節碼中,還是有生成一個類的,
比如上面的代碼 Demo類,在編譯後會生成兩個文件,
Demo.class Demo$1.class
可以用
javap -c Demo$1.class
來看看字節碼裡做了什麼
可以看到,其實Demo$1就是一個標準的類,
相當於一個 Student類,
雖然我們沒有繼承 Person實現一個具體的類,
可是Java幫我們做了這件事,
如果你的開發經驗足夠豐富的話,有反編譯的經驗,
就會看到在一些jar包裡有大量的12為後綴的class文件,
其實這些都是匿名內部類來著。
所以現在知道匿名跟內部類是什麼意思了吧。
閱讀更多 Java高併發框架 的文章