方法 - 局部內部類無法訪問局部變量,因爲方法結束後方法局部內部類的實例可能仍然存在。但局部變量一旦本地方法結束就會消失。 我知道方法 - 本地內部類可以訪問最終局部變量,這是否意味着方法結束後,最終局部變量仍然活着?java中最終局部變量的範圍
6
A
回答
7
排序Java匿名內部類的行爲就像「閉包」,也就是說,它們在當前本地狀態周圍「關閉」。但是,Java只允許這些類關閉最終變量。如果沒有,變量的本地狀態可能會改變,但內部類中保存的版本不會,因此它將訪問「過期」實例。這可能會讓程序員感到困惑。
相反,Java要求實例通過方法處理可變性,而不是通過變量重新分配。這導致更好的清晰度並允許更簡單的調試。有關Java爲什麼要這樣做的更多信息,請參閱this answer。
由於類仍持有該變量的引用,在回答你的問題是是,該實例不會被垃圾收集,直到內部類放棄變量的所有權。
+1
*「這可能會讓程序員感到困惑。」* - 更重要的是,它不會再像「封閉」一樣。根據詞彙上下文,您將擁有一個具有明顯不同綁定的標識符名稱。 –
+0
@Stephen公平夠了,好點。 –
1
不,它不。這意味着局部變量的副本在內部類實例中仍然存在。 '最後'只是確保兩份不會混淆價值。
相關問題
- 1. Java:局部變量範圍
- 2. 局部變量的範圍
- 3. 最終局部變量的壽命
- 4. 局部變量範圍問題
- 5. 局部變量範圍違規,C#?
- 6. 龍捲風局部變量範圍(python)
- 7. Angular 2 Resolve - 局部變量範圍
- 8. 與局部變量範圍,笨
- 9. 局部變量超出範圍......我想
- 10. java中的範圍變量
- 11. Java中的變量範圍
- 12. Java中的變量範圍
- 13. 在封閉範圍內定義的局部變量num必須是最終的或有效的最終
- 14. 在封閉範圍內定義的局部變量必須是最終的或有效的最終
- 15. 最終局部變量錯誤
- 16. 局部變量必須是最終
- 17. 局部變量需要最終聲明
- 18. JavaScript中變量的局部和全局範圍
- 19. javascript全局變量範圍
- 20. 組變量全局範圍
- 21. VBA - 全局變量範圍?
- 22. PHP:全局變量範圍
- 23. Python全局變量範圍
- 24. Java中的內部塊如何訪問應該超出範圍的局部變量? (在JVM如何處理Java中最後的局部變量)
- 25. 如何在全局範圍PHP中訪問局部變量?
- 26. 如何在JavaScript中給出局部變量,全局範圍
- 27. 封閉本地範圍變量與全局範圍變量 - Python
- 28. Java最終變量
- 29. Java - 最終變量
- 30. 流星中的全局變量範圍?
謹慎發佈您的示例,以免無意誤解您的問題?我們是編碼器,而Java代碼會使這個更清晰。 – jmort253
我認爲這是你的意思,並且_no_它不起作用。 http://ideone.com/LNg9w –
@HunterMcMillen問題是關於方法本地類,而不是其他方法。 – Jeffrey