原文:一個注意事項:內部類引用的外部變量必須是final的

之前寫過一個項目,好久沒更新了,最近翻起以前的代碼,發現在這里報了一個錯。 現在轉到Intellij了,從前在Eclipse luna中是可以編譯通過的,Eclipse mars也會報錯,JDK版本都是 . ,還沒去查為什么 為什么在內部類中引用外部變量時,必須聲明為final呢 最開始我想的是,會和Java的內存模型有關。因為我們都知道,帶有static的變量或者方法是屬於類的,也就是說,類成 ...

2016-08-15 19:19 1 5201 推薦指數:

查看詳情

Java內部類引用外部類中的局部變量為何必須是final問題解析

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

Mon May 08 00:36:00 CST 2017 0 1220
Java內部類引用外部類中的局部變量為何必須是final問題解析

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

Sat Oct 12 00:49:00 CST 2013 0 5284
關於內部類引用外部變量的理解

觀察下面代碼   1,如果把第五行的注釋打開則編譯不通過,因為方法內的變量需要是final變量或者事實上的final變量(effectively final)才可以傳入匿名內部類被使用   2,把第五行注釋加上之后,用java8可以編譯通過,此時變量d是事實上的final變量,jvm ...

Thu Aug 08 07:56:00 CST 2019 0 985
java----內部類與匿名內部類的各種注意事項與知識點

Java 內部類分四種:成員內部類、局部內部類、靜態內部類和匿名內部類。1、成員內部類: 即作為外部類一個成員存在,與外部類的屬性、方法並列。注意:成員內部類中不能定義靜態變量,但可以訪問外部類的所有成員。public class Outer{private static int i ...

Sat Feb 18 00:20:00 CST 2017 0 1768
匿名內部類為什么訪問外部類局部變量必須是final的?

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

Fri Aug 05 08:03:00 CST 2016 1 13823
內部類變量為什么必須加final

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

Mon Dec 23 06:33:00 CST 2019 0 842
匿名內部類中使用的外部局部變量為什么只能是final變量

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

Wed Aug 29 00:01:00 CST 2018 0 1082
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM