直接訪問
對局部變量有要求具體如下:
-
(1)內(nèi)部類里面使用外部類的局部變量時,其實就是內(nèi)部類的對象在使用它,內(nèi)部類對象生命周期中都可能調(diào)用它, 而內(nèi)部類試圖訪問外部方法中的局部變量時,外部方法的局部變量很可能已經(jīng)不存在了,那么就得延續(xù)其生命, 拷貝到內(nèi)部類中,而拷貝會帶來不一致性,從而需要使用final聲明保證一致性。說白了,內(nèi)部類會自動拷貝外部變量 的引用,為了避免:
外部方法修改引用,而導(dǎo)致內(nèi)部類得到的引用值不一致
內(nèi)部類修改引用,而導(dǎo)致外部方法 的參數(shù)值在修改前和修改后不一致。于是就用 final 來讓該引用不可改變。
(2)內(nèi)部類通常都含有回調(diào),引用那個匿名內(nèi)部類的函數(shù)執(zhí)行完了就沒了,所以內(nèi)部類中引用外面的局部變量需要 是final的,這樣在回調(diào)的時候才能找到那個變量,而如果是外部類的成員變量就不需要是final的,因為內(nèi)部類本身 都會含有一個外部類的引用(外部類.this),所以回調(diào)的時候一定可以訪問到