国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java匿名內部類使用局部變量

2019-11-06 07:35:05
字體:
來源:轉載
供稿:網友

java8之前,我們在匿名內部類或者局部內部類中使用局部變量都需要將局部變量聲明為final,這是因為java底層給我們做了一些小動作,匿名內部類表面上沒有構造函數,其實是有的,底層直接將局部變量通過構造函數傳給內部類,局部變量在生命周期結束后就會被銷毀,而匿名內部類的生命周期一般來說都比局部變量長,那么假如我們可以修改這個變量,就會出現內外不一致的現象(這里的修改指的是改變引用,而不是改變變量的內容),因為外面的局部變量是不會因為內部的引用改變而改變的,所以強制要求聲明為final。 但是在Java8中,出現了Effectively final,意思就是,假如這個局部變量我們在使用過程中都不會出現改變引用的情況,那么我們不需要加final,默認是final,如下代碼

public class Main { static volatile boolean flag = true; public static void main(String[] args) { Node node = new Node(); new Thread(() -> { node.a = 2; }).start(); } public static class Node { public int a = 1; }}

在Java8編譯中編譯是不會出錯的,然后我們修改一下代碼

public class Main { static volatile boolean flag = true; public static void main(String[] args) { Node node = new Node(); new Thread(() -> { node = new Node(); }).start(); } public static class Node { public int a = 1; }}

這時候就會報錯,因為我們嘗試修改node的值(引用),所以就不是有效final了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 甘谷县| 望江县| 沧州市| 瓦房店市| 秀山| 梓潼县| 临西县| 长岭县| 莫力| 卓尼县| 多伦县| 镇宁| 襄樊市| 华安县| 张家口市| 八宿县| 南靖县| 新和县| 马关县| 桃园县| 边坝县| 澜沧| 罗源县| 长兴县| 上蔡县| 察隅县| 准格尔旗| 惠安县| 古浪县| 新建县| 凌海市| 西吉县| 开阳县| 武陟县| 鄢陵县| 洛隆县| 大邑县| 通江县| 喜德县| 永昌县| 城固县|