原文:Java基礎-內部類-為什么局部和匿名內部類只能訪問局部final變量

先看下面這段代碼: 這段代碼會被編譯成兩個class文件:Test.class和Test .class。默認情況下,編譯器會為匿名內部類和局部內部類起名為Outterx.class x為正整數 。 根據上圖可知,test方法中的匿名內部類的名字被起為 Test 。 上段代碼中,如果把變量a和b前面的任一個final去掉,這段代碼都編譯不過。我們先考慮這樣一個問題: 當test方法執行完畢之后,變 ...

2015-05-10 16:33 1 2265 推薦指數:

查看詳情

為什么匿名內部類只能訪問其所在方法中的final類型的局部變量

  大部分時候,類被定義成一個獨立的程序單元。在某些情況下,也會把一個類放在另一個類的內部定義,這個定義在其他類內部的類就被稱為內部類,包含內部類的類也被稱為外部類。   對於上面的成員內部類,一般做法是在Outer中寫一個返回Inner類對象的方法 ...

Fri Mar 04 05:12:00 CST 2016 3 10034
JAVA內部類(匿名內部類)訪問局部變量為什么要用final修飾?

本文主要記錄:在JAVA中,(局部)內部類訪問某個局部變量,為什么這個局部變量一定需要用final 關鍵字修飾? 首先,什么是局部變量?這里的局部是:在方法里面定義的變量。 因此,內部類能夠訪問局部變量,說明這個內部類不是在類中定義的內部類,而是在方法中定義的內部類,稱之為:局部內部類 ...

Sun Aug 07 01:21:00 CST 2016 5 11312
匿名內部類為什么訪問部類局部變量必須是final的?

1. 內部類里面使用外部類局部變量時,其實就是內部類的對象在使用它,內部類對象生命周期中都可能調用它,而內部類試圖訪問外部方法中的局部變量時,外部方法的局部變量很可能已經不存在了,那么就得延續其生命,拷貝到內部類中,而拷貝會帶來不一致性,從而需要使用final聲明保證一致性。說白了,內部類會自動 ...

Fri Aug 05 08:03:00 CST 2016 1 13823
匿名內部類中使用的外部局部變量為什么只能final變量

匿名內部類引用的變量會被拷貝一份到內部類的環境中 但其后,在外部,該變量如果被修改,則內部外部不一致 Java為了避免數據不同步的問題,做出了匿名內部類只可以訪問final局部變量的限制。 究其原因,在於 區域變量 x 並不是真正被拿來於內部匿名類別中使用,而是在內部 ...

Wed Aug 29 00:01:00 CST 2018 0 1082
匿名內部類可以訪問變量---靜態成員變量final修飾的局部變量

  在學習多線程的時候用到了匿名內部類匿名內部類可以訪問static靜態成員變量或者final修飾的局部變量。   匿名內部類在編譯之后會生成class文件,比如Test內的第一個匿名內部類編譯之后就是Test$1.class;   匿名內部類訪問final修飾的局部變量在生成Test ...

Tue Dec 11 06:53:00 CST 2018 0 816
局部內部類匿名內部類的對比

創建內部類的典型的方式是在一個方法體的里面創建,局部內部類不能有訪問說明符,因為它不是外圍類的一部分,但是它可以訪問當前代碼塊內的常量,以及此外圍類的所有成員。下面的例子對局部內部類匿名內部類的創建進行了比較。 具體代碼實現: package thinking.in.java ...

Mon Apr 25 19:11:00 CST 2016 1 3461
為什么Java匿名內部類訪問的方法參數或方法局部變量需要被final修飾

分析 1、內部類(不論是否是匿名內部類)可訪問部類變量(包括外部類的類變量、實例變量、外部類方法的局部變量等)、方法:可修改變量值、調用方法等。內部類定義時的位置有兩種: 在外部類的方法內:此時該內部類只能匿名內部類(語法上不支持在方法內定義非匿名類)。此時內部類訪問上述所有變量 ...

Wed Jun 21 19:57:00 CST 2017 0 3698
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM