程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> java-為什麼局部內部類所用的變量要用final修飾

java-為什麼局部內部類所用的變量要用final修飾

編輯:編程解疑
為什麼局部內部類所用的變量要用final修飾

為什麼局部內部類所用的變量要用final修飾,網上有很多說法,有說內部類,與局部變量生命周期的,

最佳回答:


final的原因:內部類對象的生命周期會超過局部變量的生命期。局部變量的生命期:當該方法被調用時,該方法中的局部變量在棧中被創建,當方法調用結束時,這些局部變量消失。但是內部類對象的生命期與其它類一樣,當創建一個該局部類對象後,只有當所有引用都斷開時,才會消失。
但是如果局部內部類的對象訪問其所在方法的局部變量,只要局部內部類對象還活著,棧中的那些在內部類還引用著的局部變量就不能消失,換句話說:局部變量的生命期至少等於或大於局部內部類對象的生命期——與上面完全互相矛盾。解決的辦法:局部內部類的對象可以訪問其所在方法中的局部變量,但是這個變量必須被定義為final.因為final修飾後,若在內部類訪問了其所在方法中的該局部變量,編譯器會在內部內中保存該局部變量的一份copy,但是copy後,兩邊其實都是一個東西,為了防止其中之一被修改,造成混亂,干脆讓該變量為只讀的。即使外部變量已經消失,copy還是存在的,且不會混亂。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved