直接訪問(wèn)
對(duì)局部變量有要求具體如下:
-
(1)內(nèi)部類里面使用外部類的局部變量時(shí),其實(shí)就是內(nèi)部類的對(duì)象在使用它嫁赏,內(nèi)部類對(duì)象生命周期中都可能調(diào)用它, 而內(nèi)部類試圖訪問(wèn)外部方法中的局部變量時(shí)油挥,外部方法的局部變量很可能已經(jīng)不存在了潦蝇,那么就得延續(xù)其生命, 拷貝到內(nèi)部類中深寥,而拷貝會(huì)帶來(lái)不一致性攘乒,從而需要使用final聲明保證一致性。說(shuō)白了惋鹅,內(nèi)部類會(huì)自動(dòng)拷貝外部變量 的引用则酝,為了避免:
外部方法修改引用,而導(dǎo)致內(nèi)部類得到的引用值不一致
內(nèi)部類修改引用闰集,而導(dǎo)致外部方法 的參數(shù)值在修改前和修改后不一致沽讹。于是就用 final 來(lái)讓該引用不可改變般卑。
(2)內(nèi)部類通常都含有回調(diào),引用那個(gè)匿名內(nèi)部類的函數(shù)執(zhí)行完了就沒(méi)了妥泉,所以內(nèi)部類中引用外面的局部變量需要 是final的椭微,這樣在回調(diào)的時(shí)候才能找到那個(gè)變量,而如果是外部類的成員變量就不需要是final的盲链,因?yàn)閮?nèi)部類本身 都會(huì)含有一個(gè)外部類的引用(外部類.this)蝇率,所以回調(diào)的時(shí)候一定可以訪問(wèn)到