Java內部類

來源:互聯網
上載者:User

標籤:


儘管內部類的使用違背了Java要比C++更加簡單的設計理念,但是所謂存在即合理,內部類可以對同一個包中的其他類隱藏起來,內部類方法可以訪問該類定義所在範圍中的資料,包括私人的資料,某些情況下使用匿名內部類的解決方案更簡短易於理解。

內部類是定義在另一個類中的類。既可以定義在類中,也可以定義在類的方法中。

內部類的對象有一個隱式引用,它引用了執行個體化該內部對象的外部類對象,因此,通過這個指標,可以訪問外部類的全部狀態,內部類既能訪問自身的資料域,又能訪問建立它的外部類對象的資料域。注意:static內部類沒有這種附加指標。

下面分別介紹局部內部類 靜態內部類 和 匿名內部類。在介紹之前,簡單說下Java中的static 和final 關鍵字作用。

final 關鍵字

修飾屬性 表示屬性值初始化後不可改變;

修飾方法,表示方法不可覆寫,編譯器遇到調用final方法時會轉入內嵌機制,大大提高執行效率;

修飾類,表示類不可被繼承,沒有子類。

final關鍵字有無法被改變 終態的意思,可修飾局部變數,執行個體變數,靜態變數,在建立之後,只能夠賦值一次,但是定義時不必初始化。(介面中final屬性必須初始化)還可修飾形參,表示讀取參數,但無法改變參數的值。

static關鍵字

修飾屬性,表示公用屬性,所有執行個體對象共用,又叫類屬性,靜態屬性;JVM只為靜態變數分配一次記憶體,在記憶體中不管多少執行個體也只有一個拷貝。

修飾方法,表示類方法,和類屬性一樣,都可直接通過類名直接存取。

修飾內部類,不能修飾普通類。

static代碼塊,JVM載入類時會執行這些靜態代碼塊,如果有多個,按出現順序依次執行,每個代碼塊只會被執行一次。

局部內部類

在外部類的方法中實現的類,對外部世界完全隱藏,除了改方法,沒有其他方法知道該類的存在。局部類不能用public和private訪問說明符進行申明。它的範圍限定在這個局部類的塊中。與其他內部類相比,局部內部類不僅能夠訪問其外部類的狀態,還可以訪問定義其的方法中的局部變數,但必須是final類型的局部變數。

匿名內部類

內部類也可以繼承一個類或實現一個介面,假如只建立這個類的一個對象,就不必命名了。建構函式的名字與類名相同,匿名類沒有類名,所以沒有建構函式,取而代之的是,將構造器參數傳遞給父類建構函式;如果內部類實現介面,不能有任何建構函式。

靜態內部類

有時候,使用內部類只是為了把一個類隱藏在另外一個類的內部,並不需要內部類引用外部類對象。為此,可以將內部類申明為static,以便取消產生的引用。這時,內部類就不能訪問外部類的狀態了。


Java內部類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.