java中的內部類與匿名類的基本使用方法

2021-07-05 18:58:25 字數 2146 閱讀 4108

塊**的定義:簡單來說就是處於一對{}之間的**。

內部類的定義:處於另外乙個類中的具有型別名稱定義塊**。

匿名類的定義:已知父類或者介面標準的內部類,且不具有具體的型別名稱的塊**。匿名類的例項建立必須使用new 父類名|介面名 ()來建立。)

一、命名內部類——用於臨時建立例項或者型別,且該型別或例項需要控制是否允許使用該類的人呼叫

1-1:命名區域性內部類

public class outclass

return new innerclass().i;

}public static void main(string args)

}此例中對於使用outclass的人來說,無需關注於innerclass類的存在,只關注於f()函式具體的返回值;使用者無法訪問innerclass類的成員.

1-2:命名成員內部類

public class outclass

public int f()

public static void main(string args)

}此例將簡單內部類提公升至成員等級,在此等級中,我們可以自由設定該內部類是允許outclass使用者例項化innerclass例項,如果為public 型別,則允許例項化,如果為private 型別,則不允許例項化(除開outclass的成員方法將innerclass型別的例項作為返回值返回)

1-3:命名內部類的例項化方法

public class outclass

}//public static void test()

////public static innerclass ic=new innerclass();//錯誤的例項化內部類

public innerclass ic=new innerclass();

public innerclass test()

public static void main (string args)

}注意:此處的輸出結果為:

innerclass construction start

innerclass construction start

原因是外部類例項化時,需要產生乙個內部類innerclass成員,因此會呼叫內部類的建構函式,所以會有第一條

innerclass construction start

而當在主方法中例項化內部類時,也需要呼叫內部類的建構函式,因此產生了第二條

innerclass construction start

內部類例項化的前提條件

:內部類例項的存在,必須依賴於外部類例項的存在,也就是說,在沒有例項化外部類的情況下,不允許產生內部類例項,同樣的,由於靜態方法及靜態成員的存在必須依賴於包含該靜態方法或該靜態成員的型別的例項,所以內部類的例項不能存在於外部類的靜態方法或靜態成員中,同理,非靜態的內部類也不能包含靜態的成員。

二、匿名內部類——用於臨時建立例項,且該例項不希望類的使用者關注

匿名內部類的存在前提有兩種:1、已知該型別的父類 或者 2、已知該型別的介面標準

通常對於乙個臨時的例項,我們並不希望他被使用者關注,比如乙個人類person,我們在處理一些他的特例的時候——比如blindman型別的人,而這種型別並不常見,所以我們可以不需要實體建立blindman這個型別,而直接使用它的具體例項:

1-1:已知父類的匿名內部類

public class test

};p.r();}}

注意:由於此處的匿名類是建立p指標的具體膜板,必須在{}外新增";"號,表示是建立person 例項的語句結束。

1-2:已知介面標準的內部類

inte***ce ifly

class plan

};f.fly();}}

三、靜態內部類

靜態內部類的出現主要是為了解決內部類的重複例項化問題,對於乙個經常呼叫的內部類,在我們不需要關注其具體內容的時候,重複的多次出現會消耗大量資源,因此利用了靜態類的特性——只需要例項化一次,產生了靜態內部類,靜態內部類中可以宣告靜態成員也可以存在非靜態成員,且靜態內部類遵循靜態規則既:靜態的方法或者型別,不能直接呼叫其外部的非靜態成員。

需要注意的是  靜態內部類的存在並不依賴於其外部類的例項,原因是普通類的例項化順序是先靜態成員,再成員變數初始化,再構造;由於在外部類例項化之前就已經產生了靜態內部類(將他作為靜態成員),因此靜態內部類並不具有對外部類的依賴性。

Java匿名類,Java匿名內部類

匿名類是指沒有類名的內部類,必須在建立時使用 new 語句來宣告類。其語法形式如下 new 類或介面 這種形式的 new 語句宣告乙個新的匿名類,它對乙個給定的類進行擴充套件,或者實現乙個給定的介面。使用匿名類可使 更加簡潔 緊湊,模組化程度更高。匿名類有兩種實現方式 下面通過 來說明。public...

Java內部類與匿名內部類

定義在類中方法之外的內部類分為例項內部類和靜態內部類.例項內部類自動持有外部類的例項的引用,即可以訪問外部類的所有變數 靜態內部類可以直接訪問外部類的靜態成員 定義在方法中的內部類叫區域性內部類,該類只能訪問被final修飾的區域性變數和引數 介面定義如下 inte ce super 例子1 pub...

Java 內部類與匿名內部類

一.內部類 內部類是指包含在類中的類,也稱為 巢狀類 包含內部類的類稱為外部類,內部類可看做外部類的成員類。class outer inner in new inner 建立內部類物件 in.seeouter 呼叫內部類成員方法 public static void main string args...