在java中, 方法的内部類可以通路方法中的局部變量,但必須用final修飾才能通路。
原因:
1.當方法被調用運作完畢之後,局部變量就已消亡了。但内部類對象可能還存在,
直到沒有被引用時才會消亡。此時就會出現一種情況,就是内部類要通路一個不存在的局部變量。
2.解決這一問題的辦法就是使用final修飾局部變量,通過将final局部變量"複制"一份,
複制品直接作為方法内部類中的資料成員,這事方法内部類通路的其實是這個局部變量的複制品!
而且,由于被final修飾的變量指派後不能再修改,是以就保證了複制品與原始變量的一緻。
3.原因二的功能能實作的原因是:Java采用了一種copy local variable(複制局部變量)的方式來實作,
也就是說把定義為final的局部變量拷貝過來用,而引用的也可以拿過來用,隻是不能重新指派。
進而造成了可以access local variable(通路局部變量)的假象,而這個時候由于不能重新指派,
是以一般不會造成不可預料的事情發生。
4. 使用final修飾符不僅會保持對象的引用不會改變,
而且編譯器還會持續維護這個對象在回調方法中的生命周期.
是以這才是final變量和final參數的根本意義.