眾所周知,想要在匿名內部類中用匿名內部類外部的變數需要定義成final,為什麼呢?
private static threadfactory build(threadfactorybuilder builder)
if (daemon != null)
if (priority != null)
if (uncaughtexceptionhandler != null)
return thread;}};
}
以上**中的count本應在build方法執行完後會清理掉,該引用存在於棧內部中,方法結束,變數出棧,該引用指向的物件被gc。
但由於這個count定義成了final,這個時候區域性內部類物件中包含有要訪問的final型區域性變數的乙個拷貝,成為它的資料成員。雖然在build方法結束後,這個方法裡的count引用出棧,但在由於在匿名內部類中有乙份count引用的copy,所以count物件還有引用指向,不會被**。相當於延長了區域性變數count物件的生命週期。
內部類與匿名內部類
內部類 內建類,巢狀類。將類定義在另乙個類中,該類就是內部類。類中定義的類中就是內部類。其實類的定義位置發生了一點小變化。訪問方式 內部可以直接訪問外部類中的成員。外部類想要訪問內部類,需要建立內部類物件。什麼時候定義內部類呢?當分析乙個事物時,該事物的內部還有具體的事物,這個具體的事物在使用該事物...
內部類與匿名內部類
內部類 定義 在類中定義乙個類,那麼這個類就是內部類。內部類的定義格式 成員方法 1.通過外部類方法,建立內部類物件,呼叫內部類方法。2.外部類.內部類 物件名 new 外部類 內部類 成員變數 1.外部類的成員變數,內部類中直接使用。2.內部類的成員變數,外部類不能直接訪問。需要建立內部類物件,用...
Java內部類與匿名內部類
定義在類中方法之外的內部類分為例項內部類和靜態內部類.例項內部類自動持有外部類的例項的引用,即可以訪問外部類的所有變數 靜態內部類可以直接訪問外部類的靜態成員 定義在方法中的內部類叫區域性內部類,該類只能訪問被final修飾的區域性變數和引數 介面定義如下 inte ce super 例子1 pub...