原文:Java內部類引用外部類中的局部變量為何必須是final問題解析

今天編寫一個多線程程序,發現在方法內定義內部類時,如果內部類調用了方法中的變量,那么該變量必須申明為final類型,百思不得其解,后來想到應該是生命周期的原因,因為方法內定義的變量是局部變量,離開該方法,變量就失去了作用,也就會自動被消除,而內部類卻不會離開它所在方法就失去作用,它有更廣的生命周期,下面通過一個實例加以說明: 如例中所示,在外部類Outer中聲明了一個內部類TimerPrint,這 ...

2017-05-07 16:36 0 1220 推薦指數:

查看詳情

Java內部類引用外部類局部變量為何必須是final問題解析

今天編寫一個多線程程序,發現在方法內定義內部類時,如果內部類調用了方法變量,那么該變量必須申明為final類型,百思不得其解,后來想到應該是生命周期的原因,因為方法內定義的變量局部變量,離開該方法,變量就失去了作用,也就會自動被消除,而內部類卻不會離開它所在方法就失去作用,它有更廣 ...

Sat Oct 12 00:49:00 CST 2013 0 5284
JAVA內部類(匿名內部類)訪問的局部變量為什么要用final修飾?

本文主要記錄:在JAVA,(局部)內部類訪問某個局部變量,為什么這個局部變量一定需要用final 關鍵字修飾? 首先,什么是局部變量?這里的局部是:在方法里面定義的變量。 因此,內部類能夠訪問某局部變量,說明這個內部類不是在類定義的內部類,而是在方法定義的內部類,稱之為:局部內部類 ...

Sun Aug 07 01:21:00 CST 2016 5 11312
匿名內部類為什么訪問外部類局部變量必須是final的?

1. 內部類里面使用外部類局部變量時,其實就是內部類的對象在使用它,內部類對象生命周期中都可能調用它,而內部類試圖訪問外部方法局部變量時,外部方法的局部變量很可能已經不存在了,那么就得延續其生命,拷貝到內部類,而拷貝會帶來不一致性,從而需要使用final聲明保證一致性。說白了,內部類會自動 ...

Fri Aug 05 08:03:00 CST 2016 1 13823
內部類訪問的局部變量必須加final

(1)內部類外部類的一個成員,就像外部類的成員方法一樣,所以內部類有權限訪問外部類的所有成員,包括private的。 (2)內部類不能訪問外部類方法局部變量,除非變量final的(一般發生在方法定義的內部類)。這是因為局部變量的生命周期原因 ...

Wed Sep 09 17:36:00 CST 2015 0 2040
內部類訪問局部變量的時候,為什么變量必須加上final修飾

這里的局部變量就是在類方法變量,能訪問方法變量的類當然也是局部內部類了。我們都知道,局部變量在所處的函數執行完之后就釋放了,但是內部類對象如果還有引用指向的話它是還存在的。例如下面的代碼: class Outer{ public static void main(String[] args ...

Tue Aug 02 23:12:00 CST 2016 0 8054
匿名內部類中使用的外部局部變量為什么只能是final變量

被匿名內部類引用變量會被拷貝一份到內部類的環境 但其后,在外部,該變量如果被修改,則內部外部不一致 Java為了避免數據不同步的問題,做出了匿名內部類只可以訪問final局部變量的限制。 究其原因,在於 區域變量 x 並不是真正被拿來於內部匿名類別中使用,而是在內部 ...

Wed Aug 29 00:01:00 CST 2018 0 1082
細說匿名內部類引用方法局部變量時為什么需要聲明為final

一、前言   在研究公司某個項目的源碼,看到前人使用了挺多內部類內部類平時我用的比較多的是匿名內部類,平時用的多的是匿名內部類,其他形式的用的比較少,然后我就有個疑惑:到底內部類是基於什么樣的考慮,才讓java設計者搞這么一套實現?還有,平時在什么情境下會考慮使用內部類呢?這個我將在另外一篇博 ...

Fri Nov 24 06:32:00 CST 2017 1 3312
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM