原文:內部類的變量為什么必須加final

因為生命周期不同,局部變量會在方法結束以后會被銷毀,這樣會導致內部類引用了一個不存在 的變量,這就前后矛盾了 所以編譯器會在內部類中生成一個局部變量的拷貝,這個拷貝的生命周期與內部類的對象相同,就不會出現上述的問題 但是這樣一來就導致了其中一個變量被修改,兩個變量值可能會不同的問題,為了解決這個問題,編譯器就要求局部變量需要把final修飾,以保證兩個變量的值相同。 在JDK 之后,編譯器不要求內 ...

2019-12-22 22:33 0 842 推薦指數:

查看詳情

內部類訪問的局部變量必須final

(1)內部類是外部類的一個成員,就像外部類的成員方法一樣,所以內部類有權限訪問外部類的所有成員,包括private的。 (2)內部類不能訪問外部類方法中的局部變量,除非變量final的(一般發生在方法中定義的內部類)。這是因為局部變量的生命周期原因 ...

Wed Sep 09 17:36:00 CST 2015 0 2040
內部類訪問局部變量時,為什么需要final關鍵字

變量的作用域的問題,因為匿名內部類是出現在一個方法的內部的,如果它要訪問這個方法的參數或者方法中定義的變量,則這些參數和變量必須被修飾為final。因為雖然匿名內部類在方法的內部,但實際編譯的時候,內部類編譯成Outer.Inner,這說明內部類所處的位置和外部類中的方法處在同一個等級上,外部類 ...

Tue Oct 29 22:16:00 CST 2019 0 440
匿名內部類訪問方法成員變量需要final的原因及證明(轉)

https://blog.csdn.net/wjw521wjw521/article/details/77333820 在java編程中,沒用的類定義太多對系統來說也是一個負擔,這時候我們可以通過定義匿名內部類來簡化編程,但匿名內部類訪問外部方法的成員變量時都要求外部成員變量添加final ...

Sat Mar 24 08:25:00 CST 2018 0 1497
內部類訪問局部變量的時候,為什么變量必須加上final修飾

這里的局部變量就是在類方法中的變量,能訪問方法中變量的類當然也是局部內部類了。我們都知道,局部變量在所處的函數執行完之后就釋放了,但是內部類對象如果還有引用指向的話它是還存在的。例如下面的代碼: class Outer{ public static void main(String[] args ...

Tue Aug 02 23:12:00 CST 2016 0 8054
Java基礎-內部類-為什么局部和匿名內部類只能訪問局部final變量

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

Mon May 11 00:33:00 CST 2015 1 2265
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
Java內部類引用外部類中的局部變量為何必須是final問題解析

今天編寫一個多線程程序,發現在方法內定義內部類時,如果內部類調用了方法中的變量,那么該變量必須申明為final類型,百思不得其解,后來想到應該是生命周期的原因,因為方法內定義的變量是局部變量,離開該方法,變量就失去了作用,也就會自動被消除,而內部類卻不會離開它所在方法就失去作用,它有更廣 ...

Mon May 08 00:36:00 CST 2017 0 1220
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM