溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java中有哪些內(nèi)部類

發(fā)布時間:2021-06-30 17:15:18 來源:億速云 閱讀:130 作者:Leah 欄目:大數(shù)據(jù)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)Java中有哪些內(nèi)部類,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

為什么使用內(nèi)部類?

??每個內(nèi)部類都能獨立地繼承自一個(接口的)實現(xiàn),所以無論外部類是否已經(jīng)繼承了某個(接口的)實現(xiàn),對于內(nèi)部類沒有影響。

  • 成員內(nèi)部類

    • 為啥?因為靜態(tài)變量和方法不依賴對象,僅與類有關(guān)。在加載靜態(tài)域時,根本沒有外部類。所以在非靜態(tài)內(nèi)部類中不能定義static變量和方法,編譯會不通過。

    • 內(nèi)部類對于外部類來說,相當(dāng)于一個成員變量。內(nèi)部類可以使用任意訪問控制符

    • 內(nèi)部類的方法可以直接訪問外部類的數(shù)據(jù),而不受訪問控制符的影響

    • 創(chuàng)建內(nèi)部類對象方法:外部類.內(nèi)部類 對象名 = 外部類對象.new 內(nèi)部類()

    • 編譯之后產(chǎn)生兩個class文件:Outer.class 和 Outer$Inner.class

    • 內(nèi)部類中不能存在任何static的變量和方法

  • 靜態(tài)內(nèi)部類:用static修飾的內(nèi)部類

    • 靜態(tài)內(nèi)部類訪問外部類的非靜態(tài)成員:不能直接訪問,需要 new 外部類().成員

    • 如果訪問外部類的static成員(名稱與內(nèi)部類相同):“類名.靜態(tài)成員”

    • 如果訪問外部類的static成員(名稱與內(nèi)部類不相同):"靜態(tài)成員名"

    • 創(chuàng)建靜態(tài)內(nèi)部類對象(不需要外部類對象):外部類.內(nèi)部類 對象名 = new 外部類.內(nèi)部類()

  • 方法內(nèi)部類:訪問僅限與方法內(nèi)(或者該作用域內(nèi))

    • 局部內(nèi)部類就像方法里的局部變量一樣,不能用public protected private static修飾的

    • 只能訪問方法中定義的final類型的局部變量。原因:局部變量會隨著方法體執(zhí)行完而消亡。但內(nèi)部類對象還存在。(導(dǎo)致內(nèi)部類要訪問一個不存在的局部變量)(使用final不僅會保持對象的引用,還會讓編譯器持續(xù)維護這個對象在回調(diào)方法中的生命周期)(局部內(nèi)部類并不是直接調(diào)用方法傳進來的參數(shù),而是內(nèi)部類通過構(gòu)造器將參數(shù)備份一份)

  • 匿名內(nèi)部類

    • 匿名內(nèi)部類直接使用 new 來生成一個對象的引用

    • 缺點:僅能被使用一次

    • 使用匿名內(nèi)部類必須繼承一個類或者實現(xiàn)一個接口(兩者不可兼得)

    • 匿名內(nèi)部類不能有構(gòu)造函數(shù),不能存在任何靜態(tài)成員變量和靜態(tài)方法

    • 匿名內(nèi)部類不能是抽象的必須實現(xiàn)繼承的類或者實現(xiàn)的接口的所有抽象方法

    • 匿名內(nèi)部列初始化:使用構(gòu)造代碼塊。使用構(gòu)造代碼塊能夠達到為匿名內(nèi)部類創(chuàng)建一個構(gòu)造器的效果。

上述就是小編為大家分享的Java中有哪些內(nèi)部類了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI