原文:匿名內部類中使用的外部局部變量為什么只能是final變量

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

2018-08-28 16:01 0 1082 推薦指數:

查看詳情

匿名內部類為什么訪問外部類局部變量必須是final的?

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

Fri Aug 05 08:03:00 CST 2016 1 13823
Java基礎-內部類-為什么局部匿名內部類只能訪問局部final變量

先看下面這段代碼:   這段代碼會被編譯成兩個class文件:Test.class和Test1.class。默認情況下,編譯器會為匿名內部類局部內部類起名為Outterx.class(x為正整數)。   根據上圖可知,test方法中的匿名內部類的名字被起為 Test ...

Mon May 11 00:33:00 CST 2015 1 2265
匿名內部類可以訪問的變量---靜態成員變量final修飾的局部變量

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

Tue Dec 11 06:53:00 CST 2018 0 816
JAVA中內部類(匿名內部類)訪問的局部變量為什么要用final修飾?

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

Sun Aug 07 01:21:00 CST 2016 5 11312
細說匿名內部類引用方法局部變量時為什么需要聲明為final

一、前言   在研究公司某個項目的源碼,看到前人使用了挺多內部類內部類平時我用的比較多的是匿名內部類,平時用的多的是匿名內部類,其他形式的用的比較少,然后我就有個疑惑:到底內部類是基於什么樣的考慮,才讓java設計者搞這么一套實現?還有,平時在什么情境下會考慮使用內部類呢?這個我將在另外一篇博 ...

Fri Nov 24 06:32:00 CST 2017 1 3312
lambda和匿名內部類使用外部變量為什么要語義final?

今天群里討論java的lambda實現. 后來不斷衍生談到了為什么lambda和匿名內部類只能使用語義final外部變量. 最開始以為是java的lambda實現問題,編譯期魔法會把外部引用作為參數傳入所以在內部變化也影響不了下次調用的值,所以就干脆final了,如果用類的屬性來保管這個變量 ...

Sat Oct 20 00:00:00 CST 2018 0 1329
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM