什么是Java語法中的匿名內部類與代碼塊的使用方法?

什么是Java語法中的匿名內部類與代碼塊的使用方法?

深入理解Java匿名內部類和代碼塊的巧妙結合

Java編程中,匿名內部類和代碼塊的組合運用,常常使代碼簡潔高效,但初學者可能難以理解其精髓。本文將詳細剖析一段示例代碼,揭示其背后的機制。

讓我們先來看這段代碼:

public static void main(String[] args) {     List<String> list = new ArrayList<String>() {{                add("A");             add("B");             add("C");     }};     System.out.println(list); }

乍一看,new ArrayList() {{ … }} 似乎有些奇特。這正是匿名內部類和實例初始化塊的巧妙結合。

1. 匿名內部類:隱形的繼承

立即學習Java免費學習筆記(深入)”;

new ArrayList() 創建了一個ArrayList對象的匿名子類實例。這意味著系統在運行時動態創建了一個新的類,它繼承自ArrayList,但沒有顯式地定義類名。

2. 實例初始化塊:對象的即時初始化

緊隨其后的{{ … }} 是一個實例初始化塊。它與構造器不同,實例初始化塊在創建對象時,在其構造器之前執行。在這里,它用于直接向新創建的ArrayList對象中添加元素 “A”、”B” 和 “C”。

因此,這段代碼等效于:

public static void main(String[] args) {     List<String> list = new MyArrayList(); // MyArrayList 是一個繼承自 ArrayList 的匿名類     System.out.println(list); }  class MyArrayList extends ArrayList<String> {     { // 實例初始化塊         add("A");         add("B");         add("C");     } }

MyArrayList 這個類是隱式創建的,我們無需顯式定義它。實例初始化塊負責在對象創建的同時完成初始化工作。

Java版本差異:鉆石運算符的應用

需要注意的是,在Java 7及之前版本,這段代碼需要寫成 new ArrayList() {{ … }},而Java 8及以后版本,由于引入了鉆石運算符(),可以簡寫為 new ArrayList() {{ … }}。

總而言之,這段代碼利用匿名內部類和實例初始化塊,在創建ArrayList對象的同時完成初始化,使得代碼更加緊湊,并提升了可讀性。 這種技巧在需要快速創建并初始化對象時非常實用。

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享