為什麼匿名內部類用到的變數必須定為final?
而且被final的變數還是外部類的,外部類沒有必要不讓自己修改自己的變數的值。
上述情況其實只發生在內部類引用的變數不是成員變數的情況(如果是成員變數就直接用就好了,不用final修飾)。所以我感覺問題出在:編譯的時候,所以的類都會生成相應的class檔案,匿名內部類也不例外。所以如果引數不是final的,那麼匿名內部類裡的資訊初始化會出現一些問題(變數的值有可能來回被修改)。我猜測java的設計者也是想問題簡單化,直接大家都別改了,正好final還能起到這個作用,所以被final了。 :arrow:
相關推薦
為什麼匿名內部類用到的變數必須定為final?
如果說匿名內部類無法被繼承,那麼也只能說匿名內部類是final的。如果一個類是final的,那麼所有屬於這個類的方法是final的,但它的成員變數並不是。而且被final的變數還是外部類的,外部類沒有必要不讓自己修改自己的變數的值。上述情況其實只發生在內部類引用的變數不是成員
Java匿名內部類中使用外部類方法的形參或區域性變數必須宣告為final
對於這個問題,首先我們應該明確的一點是對於匿名內部類,它可能引用三種外部變數:外部類的成員變數外部方法或作用域內的區域性變數外部方法的引數而第一種變數是不需要宣告為final的,但後兩種是需要宣告為final的。那這是為什麼呢?不急,我們首先來看第一個知識點。知識點一,匿名內部類同所有類一
為什麼java內部類訪問區域性變數必須宣告為final?
先丟擲讓我疑惑了很久的一個問題 程式設計時,線上程中使用區域性變數時候經常編譯器會提示:區域性變數必須宣告為final package test; publicclass ThreadTest { publicvoid function(Stri
關於為什麼jdk 8以前匿名內部類引數必須為final型別的問題
我們先來看一段程式碼 public class Hello { public static void main(String[] args) { String str=
區域性變數被內部類訪問時必須用final修飾的問題
今天隨手寫了點東西,又遇到了這個問題,就是在當內部類想要訪問區域性變數的時候 ,Java就要求該區域性變數必須用final關鍵字進行修飾。之前寫程式的時候經常遇到這樣的問題,當時只是奔著快點結局問題的目的也沒仔細的思考它本質的原因。 但是我想Java如此的設計肯定有其目的,
為什麼匿名內部類引數必須為final型別
1) 從程式設計語言的理論上:區域性內部類(即:定義在方法中的內部類),由於本身就是在方法內部(可出現在形式引數定義處或者方法體處),因而訪問方法中的區域性變數(形式引數或區域性變數)是天經地義的.是很自然的 2) 為什麼JAVA中要加上一條限制:只能訪問final型的區域性變數? 3) JAV
詳解匿名內部類 ,形參為什麽要用final
創建方式 構造器 引用 roi nbsp this 外部 out 拆分 一、使用匿名內部類內部類 匿名內部類由於沒有名字,所以它的創建方式有點兒奇怪。創建格式如下: new 父類構造器(參數列表)|實現接口() { //匿名
為什麽說Java匿名內部類是殘缺的閉包
pan 年齡 pos 發生 clas 接下來 對象的引用 編譯器 xpl 前言 我們先來看一道很簡單的小題: public class AnonymousDemo1 { public static void main(String args[]) {
匿名內部類可以訪問的變數---靜態成員變數和final修飾的區域性變數
在學習多執行緒的時候用到了匿名內部類,匿名內部類可以訪問static靜態成員變數或者final修飾的區域性變數。 匿名內部類在編譯之後會生成class檔案,比如Test內的第一個匿名內部類編譯之後就是Test$1.class; 匿名內部類中訪問的final修飾的區域性變數在生成Test$1.c
【Java】從內部類中訪問變數,需要宣告為final
Cannot refer to a non-final variable ‘result’ inside an inner class defined in a different method 從內部類中訪問變數’result’,需要宣告為final 這
java匿名內部類的使用 (比如new物件後的大括號, List list = new ArrayList() { { }}這用用法等)
今天在看別人的程式碼的時候,發現有 Yyy uu=new Xxx(){ public void aaa(){ //這裡寫程式碼。。。 } } 這種形式,以前偶爾看見過,也知道是匿名內部類的情況,但一直沒有仔細去研究,今天特意花點時間去寫了點很簡單也易懂的例子,初學時需要的技術不在於
java匿名內部類的使用 (比如new物件後的大括號, List list = new ArrayList() { { }}這用用法等)
今天在看別人的程式碼的時候,發現有 Yyy uu=new Xxx(){ public void aaa(){ //這裡寫程式碼。。。 } } 這種形式,以前偶爾看見過,也知道是匿名內部類的情況,但一直沒有仔細去研究,今天特意花點時間去寫了點很簡單也易懂的例子,
為什麼匿名內部類和區域性內部類只能訪問被final修飾的區域性變數?
匿名內部類是形如下面程式碼中的類(Inner): 匿名內部類必須繼承一個父類或實現一個介面,但最多隻能實現一個介面。 上圖中,匿名內部類的父類就是Outer類。 而區域性內部類是定義在方法中、程式碼塊中、構造器中的類。 形如下圖中的類:
匿名內部類實現多執行緒,內部類呼叫外部方法中定義的變數
package Test; import java.util.Date; public class MyTread { /** * @author peter * @d
匿名內部類new 父類或者介面(){定義子類的內容(如函式等)}
/* 匿名內部類: 1。匿名內部類其實就是內部類的簡單樣式 2.定義匿名內部類的前提,內部類必須是繼承一個類或者實現介面 3.格式:new 父類或者介面(){定義子類的內容(如函式等)} 4.其實匿名內
匿名內部類訪問方法成員變數需要加final的原因及證明
在java程式設計中,沒用的類定義太多對系統來說也是一個負擔,這時候我們可以通過定義匿名內部類來簡化程式設計,但匿名內部類訪問外部方法的成員變數時都要求外部成員變數新增final修飾符,final修飾
在什麼條件下,也就是什麼時候會用java匿名內部類
內部類的意義在一定程度上解決了java多重繼承的問題。 何時才能使用匿名內部類呢?滿足下列條件: ·只用到類的一個例項 。 ·類在定義後馬上用到。 ·類非常小(SUN推薦是在4行程式碼以下) ·給類命名並不會導致你的程式碼更容易被理解。 在使用匿
android 匿名內部類使用外部類變數
方法中的變數必須final 成員變數或者成員變數 reason: 轉載:http://m.blog.csdn.net/blog/lyl_tkb/38562857 如果定義一個匿名內部類,並且希望它使用一個在其外部定的物件,那麼編譯器會要求其引數引用是final的。 1.
匿名內部類訪問外部類方法中的區域性變數
匿名內部類不能訪問外部類方法中的區域性變數,除非變數被宣告為final型別 1. 這裡所說的“匿名內部類”主要是指在其外部類的成員方法內定義,同時完成例項化的類,若其訪問該成員方法中的區域性變數,區域性變數必須要被final修飾。 2. 原因是編
Java內部類詳解 及 區域性內部類和匿名內部類只能訪問區域性final變數的原因
說起內部類這個詞,想必很多人都不陌生,但是又會覺得不熟悉。原因是平時編寫程式碼時可能用到的場景不多,用得最多的是在有事件監聽的情況下,並且即使用到也很少去總結內部類的用法。今天我們就來一探究竟。下面是本文的目錄大綱: 一.內部類基礎 二.深入理解內部類 三.內部類的使用場景和好處