事實上, 匿名內部類使用外部變數時, 因為匿名內部類和外部變數的生命週期不同, 此時匿名內部類中的該變數其實是原來變數的副本
方法內的外部變數作用域: 當前方法
匿名內部類引用外部變數作用域: 匿名內部類的方法
由此可見, 作用域不同, 即生命週期不同
如果不使用final
修飾外部變數, 那麼在匿名內部類中修改變數引用時, 就會產生歧義, 好像在匿名內部類中可以修改已經不在作用域的外部變數, 然後外部變數的生命週期已經結束
@test
public
void
test()
};}
為什麼要有匿名內部類?
匿名內部類實現 這顯然繼承了乙個抽象類,並且在主方法當中建立了抽象類的物件,本來我們是應該先繼承這個抽象類再開始建立物件的,否則物件是無法建立的,但是為了簡便,人們建立了了匿名內部類,允許我們在主方法當中進行抽象類的例項化,同時也可以進行物件的建立。這個程式就等同於如下的程式 以下 原文 出處 舉乙...
09 為什麼要有內部類?匿名內部類表現形式由來?
為什麼要有內部類?類內部裡的類,稱內部類。內部類是為了實現多重繼承,通常是用於建立內部物件用的。既然說是為了多重繼承,那就先看繼承 package com.junc.test public class test1 class father class son extends father通過繼承關係...
內部類為什麼必須引用final區域性變數
在方法中建立內部匿名類時,一般是作為callback介面的實現而建立的,可能方法已經執行完了區域性變數生命週期結束了,之後如果callback觸發了,就可能引起變數引用丟失等記憶體訪問不一致。而加上final後,編譯器是這樣處理內部類的。如果這個外部區域性變數是常量,則在內部類 中直接用這個常量。如...