內部類中訪問的區域性變數需用final修飾的原因

2021-06-13 18:44:57 字數 394 閱讀 9939

此處的內部類指區域性內部類(包括匿名內部類),因為只有區域性內部類才可訪問區域性變數,普通非靜態內部類和靜態內部類不可能訪問方法體內的區域性變數。

需用final修飾的原因:

對於區域性變數,作用域為該方法內,方法執行結束該區域性變數也隨之消失。但內部類可能會產生隱式的「閉包」,閉包使區域性變數脫離它所在的方法繼續存在。

public class closuretest

catch (interruptedexception e)

}}).start();//此處執行完,main方法結束。但只要執行緒的run()未執行完,str的生命週期就沒結束。

}}

上例中內部類擴大了區域性變數的作用域,若沒用final修飾,也即變數的值可以隨意改變,將會引起混亂。

內部類,介面,區域性變數

1 介面方法不能包含有方法體,介面方法都是抽象方法 abstract 2 介面方法預設都使用abstract進行修飾,可寫可不寫 自動型別轉換 向上轉型,向下轉型 在內部類中,如果有變數與外部類的變數名稱相同,優先使用內部類的變數 內部類可以直接在外部類中使用,用於完成特定的功能 靜態內部類是外部類...

物件導向 區域性內部類訪問區域性變數的問題

區域性內部類 a 可以直接訪問外部類的成員 b 在區域性位置,可以建立內部類物件,通過物件呼叫內部類方法,來使用區域性內部類功能。面試題 區域性內部類訪問區域性變數的注意事項 a 區域性內部類訪問區域性變數必須用final修飾 b 為什麼呢?因為區域性變數會隨著方法的呼叫而呼叫,隨著呼叫完畢而消失。...

內部類訪問區域性變數為什麼要用final修飾

內部內訪問的區域性變數必須加final修飾符,因為方法入參裡面的區域性變數生命週期在方法體之內,而內部類的生命週期是成員級別的 如果不加final關鍵字 那麼當myrun方法執行完成之後name的生命週期就結束了 如果加上final關鍵字 記憶體中就會儲存乙份該內部變數的副本,當內部類訪問時其實訪問...