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

2021-09-20 09:10:43 字數 404 閱讀 9808

* 內部內訪問的區域性變數必須加final修飾符,因為方法入參裡面的區域性變數生命週期在方法體之內,而內部類的生命週期是成員級別的

* 如果不加final關鍵字:那麼當myrun方法執行完成之後name的生命週期就結束了

* 如果加上final關鍵字:記憶體中就會儲存乙份該內部變數的副本,當內部類訪問時其實訪問的是這個副本,

* 實際上:內部類會將這個區域性變數複製為它本身的乙個成員變數,就相當於把區域性變數的生命週期延長了

*/public static void myrun(final string name) catch (interruptedexception e)

system.out.println(name);

}}.run();

}

內部類為什麼必須引用final區域性變數

在方法中建立內部匿名類時,一般是作為callback介面的實現而建立的,可能方法已經執行完了區域性變數生命週期結束了,之後如果callback觸發了,就可能引起變數引用丟失等記憶體訪問不一致。而加上final後,編譯器是這樣處理內部類的。如果這個外部區域性變數是常量,則在內部類 中直接用這個常量。如...

java內部類所訪問的區域性變數為什麼要加final

如果我們在乙個類中宣告乙個內部類,在這個內部類中訪問了原來類中的區域性變數,那麼這個區域性變數必須在原來的類中宣告成final,如圖 class a 這是為什麼呢?答案是,因為在原來的類中執行的函式之類的東西和在內部類中執行的東西是非同步進行的,所以原來類中的函式執行完畢,內部類中的可能還沒有執行完...

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

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