匿名類(lèi)一定是內(nèi)部類(lèi)嗎 在方法中定義的內(nèi)部類(lèi)可以訪(fǎng)問(wèn)外部類(lèi)的成員變量嗎?
在方法中定義的內(nèi)部類(lèi)可以訪(fǎng)問(wèn)外部類(lèi)的成員變量嗎?首先,內(nèi)部類(lèi)和外部類(lèi)處于同一級(jí)別。因?yàn)閮?nèi)部類(lèi)是在方法中定義的,所以在方法執(zhí)行后不會(huì)銷(xiāo)毀跟隨者。問(wèn)題是,如果外部類(lèi)的方法中的變量沒(méi)有定義final,那么在
在方法中定義的內(nèi)部類(lèi)可以訪(fǎng)問(wèn)外部類(lèi)的成員變量嗎?
首先,內(nèi)部類(lèi)和外部類(lèi)處于同一級(jí)別。因?yàn)閮?nèi)部類(lèi)是在方法中定義的,所以在方法執(zhí)行后不會(huì)銷(xiāo)毀跟隨者。問(wèn)題是,如果外部類(lèi)的方法中的變量沒(méi)有定義final,那么在執(zhí)行外部類(lèi)的方法時(shí),局部變量將是GC。但是,在執(zhí)行內(nèi)部類(lèi)的方法之前,找不到它引用的外部變量。如果它被定義為final,Java將復(fù)制這個(gè)變量并將它作為成員變量構(gòu)建到內(nèi)部類(lèi)中。這樣,因?yàn)閒inal修改的值不能更改,所以該變量指向的內(nèi)存區(qū)域不會(huì)更改。