匿名內部類是否可以由靜態的內容

在使用匿名內部類時,要記住以下幾個原則:
 · 匿名內部類不能有構造方法。  (因爲匿名內部類是沒有類名的)
 · 匿名內部類不能定義任何靜態成員、方法和類。
理由:匿名內部類是晚於外部類加載的,但是匿名內部類和其對象幾乎是同時加載的,但是還是早於對象加載,而靜態內容是屬於類的,當類加載的時候就開始加載,所以當匿名內部類中有靜態內容,就會隨着類加載,而這時和對象創建衝突。
 · 匿名內部類不能是抽象類。(因爲在創建匿名內部類的時候,會立即創建匿名內部類的對象。從而也可知匿名內部類必須實現它的抽象父類或者接口裏包含的所有抽象方法)
 · 匿名內部類不能是public,protected,private,static。  
 · 只能創建匿名內部類的一個實例。
   · 一個匿名內部類一定是在new的後面,用其隱含實現一個接口或實現一個類。  
 · 因匿名內部類爲局部內部類,所以局部內部類的所有限制都對其生效。
   · 內部類只能訪問外部類的靜態變量或靜態方法。
匿名類和內部類中的中的this :
有時候,我們會用到一些內部類和匿名類。當在匿名類中用this時,這個this則指的是匿名類或內部類本身。這時如果我們要使用外部類的方法和變量的話,則應該加上外部類的類名。
關於內部類的作用:
一個內部類對象可以訪問創建它的外部類對象的內容, 甚至包括私有變量!Java編譯器在創建內部類對象時,隱式的把其外部類對象的引用也傳了進去並一直保存着。這樣就使得內部類對象始終可以訪問其外部類對象,同時這也是爲什麼在外部類作用範圍之外向要創建內部類對象必須先創建其外部類對象的原因。
如果內部類裏的一個成員變量與外部類的一個成員變量同名,也即外部類的同名成員變量被屏蔽了,怎麼辦?沒事,Java裏用如下格式表達外部類的引用:
外部類名.this
Java中的靜態內部類是沒有了指向外部的引用,類似C++中的嵌套類。Java內部類也可以是局部的,它可以定義在一個方法甚至一個代碼塊之內(記住:匿名內部類就是局部內部類的形式之一)。在java的事件處理的匿名適配器中,匿名內部類被大量的使用。
如果是在一個方法中的匿名內部類,可以利用這個方法傳進你想要的參數,不過記住,這些參數必須被聲明爲final。即如果匿名內部類需要訪問外部類的局部變量,則必須使用final修飾符來修飾外部類的局部變量,否則系統將報錯。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章