java外部類(lèi)調(diào)用內(nèi)部類(lèi)方法 在方法中定義的內(nèi)部類(lèi)可以訪問(wèn)外部類(lèi)的成員變量嗎?
在方法中定義的內(nèi)部類(lèi)可以訪問(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)可以訪問(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ì)更改。
java內(nèi)部類(lèi)可以訪問(wèn)外部類(lèi)的靜態(tài)方法嗎?
內(nèi)部類(lèi)相當(dāng)于外部類(lèi)的成員變量,因此它可以直接訪問(wèn)外部變量。外部類(lèi)不能直接訪問(wèn)內(nèi)部類(lèi)變量。必須通過(guò)創(chuàng)建內(nèi)部類(lèi)實(shí)例的方法訪問(wèn)它。新的內(nèi)部類(lèi)(32)。M是創(chuàng)建一個(gè)內(nèi)部類(lèi)實(shí)例來(lái)訪問(wèn)內(nèi)部類(lèi)成員變量。您無(wú)法理解的是外部類(lèi)如何訪問(wèn)內(nèi)部類(lèi)的私有變量。通常,私有變量m只能在innerclass中訪問(wèn),但是您應(yīng)該注意,例如,內(nèi)部類(lèi)相當(dāng)于外部類(lèi)的成員變量。類(lèi)outer{private int m private Class inner{private int n private int k}}m和類(lèi)inner是成員變量,它們相等。唯一的區(qū)別是inner封裝了幾個(gè)成員變量,比如N,K,也就是說(shuō)m,N,K是相等的,這不同于通過(guò)inner訪問(wèn)NK是創(chuàng)建一個(gè)inner實(shí)例來(lái)訪問(wèn)NK。這個(gè)解釋很清楚
很簡(jiǎn)單。當(dāng)方法結(jié)束調(diào)用時(shí),堆棧中的成員變量將被銷(xiāo)毀。匿名內(nèi)部類(lèi)的對(duì)象存儲(chǔ)在堆中,不會(huì)隨著方法調(diào)用的結(jié)束而被銷(xiāo)毀。當(dāng)匿名內(nèi)部類(lèi)訪問(wèn)成員變量時(shí),將找不到該變量,并將出現(xiàn)異常。