【java】關於Cannot refer to the non-final local variable list defined in an enclosing scope解決方法


今天學習中遇到了一個問題:

Cannot refer to the non-final local variable list defined in an enclosing scope

 

 

 

 

 

這里的new Runnable(){...}是一個匿名局部內部類,其訪問test()方法的局部變量list就會發生編譯錯誤

解決方法:

用final修飾list

 

 

原因:

程序執行test()方法時,在方法的調用棧中生成了局部變量變量list,此時產生了一個局部內部類對象,它訪問了該局部變量list,當方法test()運行結束后,局部變量list就已死亡了,不存在了,但:局部內部類對象還可能一直存在(只能沒有人再引用該對象時,它才會死亡),它不會隨着方法test()運行結束死亡。局部內部類對象和局部變量list的生命周期不一致,局部變量list死后,局部內部類對象不能訪問一個不存在的變量。

 

使用final修飾符修飾局部變量list,這時的局部內部類對象將list的“復制品”作為自己的數據成員,當局部變量list死亡以后局部內部類對象依然可以訪問list的“復制品”。

 

 

 

 注意:Java8中不寫final也能通過編譯(會隱式的添加final)

(我的是Java7)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM