首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 匿名內部類與匿名對象辨析:Thread 啟動代碼深度解讀

     編輯:程式設計疑難解答

代碼 new Thread(new Runnable() {...}).start(); 中究竟是「匿名對象傳入匿名對象」還是「匿名類傳入匿名對象」?本文從語法本質剖析兩者區別,消除概念模糊。

代碼結構拆解

new Thread( new Runnable() { ... } ).start();
//  │          │                │
//  │          │                └─ 實現 Runnable 接口的匿名內部類
//  │          └─ 作為 Thread 構造參數的對象(即上述匿名類的實例)
//  └─ Thread 匿名對象(無變量引用)

概念釐清

術語定義本例中的體現
匿名類無類名、繼承類或實現接口、僅用一次的類定義new Runnable() {...} 實現了 Runnable 接口
匿名對象無變量引用、僅用一次的對象實例new Thread(...) 和 new Runnable() {...} 產生的實例均為匿名對象

結論

這是一個匿名對象(Thread 實例)調用 start(),其構造參數是另一個匿名對象(Runnable 實現類的實例),該實例來源於匿名類定義。 簡記:「外層 new Thread 是匿名對象,內層 new Runnable 是匿名類產生的匿名對象」。

延伸思考

  • 若需多次引用該任務,應將 Runnable 實例賦值給變量,避免重複創建類定義。
  • Java 8+ 推薦使用 Lambda 表達式:new Thread(() -> {...}).start(); 更簡潔。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved