Java基礎(chǔ)之內(nèi)部類(lèi)與代理知識(shí)總結(jié)
一、內(nèi)部類(lèi)
內(nèi)部類(lèi)是指在另一個(gè)類(lèi)中的類(lèi)
- 內(nèi)部類(lèi)可以對(duì)同一個(gè)包中的所有類(lèi)隱藏(權(quán)限改為private)
- 內(nèi)部類(lèi)方法可以訪問(wèn)定義這個(gè)類(lèi)的作用域中的數(shù)據(jù),包括原本私有的數(shù)據(jù)
注意:內(nèi)部類(lèi)位于類(lèi)的內(nèi)部,并不意味著類(lèi)的實(shí)例都必須要有內(nèi)部類(lèi)的實(shí)例
內(nèi)部類(lèi)是可以訪問(wèn)定義這個(gè)類(lèi)的屬性的,因?yàn)?strong>內(nèi)部類(lèi)的對(duì)象總有一個(gè)隱式引用,指向創(chuàng)建它的外部類(lèi)對(duì)象
對(duì)于一般的類(lèi),只有包可見(jiàn)性和公共可見(jiàn)性(一個(gè)是缺省,另一個(gè)是public,沒(méi)有protected和private,protected一般對(duì)于外部類(lèi)權(quán)限是沒(méi)多大用處的)
但對(duì)于內(nèi)部類(lèi),可以是所有類(lèi)型,public、protected、default、private(因?yàn)槭莾?nèi)部類(lèi),外面還套著一個(gè)類(lèi),所以protected是有意義的)
1.1 創(chuàng)建內(nèi)部類(lèi)
內(nèi)部類(lèi)的new比較特殊,是建立在以實(shí)例化的外部類(lèi)去執(zhí)行的(而且前提內(nèi)部類(lèi)不為private)

如果內(nèi)部類(lèi)為private的話,對(duì)于外部是根本找不到這個(gè)類(lèi)的,不可以去調(diào)用,而且只有外部類(lèi)可以構(gòu)造內(nèi)部類(lèi)的實(shí)例對(duì)象
1.2 內(nèi)部類(lèi)調(diào)用外部類(lèi)的變量
也是使用this關(guān)鍵字,不過(guò)為了區(qū)分this(區(qū)分是外部類(lèi)還是內(nèi)部類(lèi)),使用外部類(lèi)的屬性時(shí),需要用:外部類(lèi)名.this來(lái)操作

二、局部?jī)?nèi)部類(lèi)
如果一個(gè)類(lèi)只要使用一次,可以直接在一個(gè)方法中局部地去定義這個(gè)類(lèi),更好地節(jié)約了空間
注意:局部?jī)?nèi)部類(lèi)聲明時(shí)是不可以有訪問(wèn)說(shuō)明符的(public或者private),局部類(lèi)的作用域被限定在聲明這個(gè)局部類(lèi)的方法塊中,局部類(lèi)最大的優(yōu)勢(shì)就是,對(duì)外部世界是完全隱藏的,甚至在本類(lèi)也不可以訪問(wèn),也就是除了聲明局部類(lèi)的方法塊中,沒(méi)有任何其他類(lèi)或方法可以訪問(wèn)局部類(lèi),知道其存在

2.1 外部方法訪問(wèn)變量
局部類(lèi)的一個(gè)優(yōu)點(diǎn)就是局部類(lèi)不僅可以訪問(wèn)外部類(lèi)的字段,還可以訪問(wèn)方法里面的局部變量

訪問(wèn)的方法與內(nèi)部類(lèi)是一致的
三、匿名內(nèi)部類(lèi)
如果對(duì)于局部?jī)?nèi)部類(lèi)使用時(shí),甚至不需要去定義匿名內(nèi)部類(lèi)的名字,只是想單獨(dú)去創(chuàng)建對(duì)象,那么可以不用給其設(shè)置名字,稱為匿名內(nèi)部類(lèi)
比如說(shuō),想要一個(gè)臨時(shí)的接口實(shí)現(xiàn)類(lèi)

當(dāng)然不一定是一個(gè)接口,也可以是一個(gè)類(lèi),如果是接口就要去實(shí)現(xiàn)里面的抽象方法,如果是類(lèi)的話,就可以自定義去進(jìn)行拓展

四、lambda表達(dá)式結(jié)合局部?jī)?nèi)部類(lèi)
前面說(shuō)過(guò)lambda表達(dá)式適用于函數(shù)式接口,所以我們也可以使用lambda表達(dá)式來(lái)實(shí)現(xiàn)局部?jī)?nèi)部類(lèi)
當(dāng)然,lambda表達(dá)式生成的相當(dāng)于是一個(gè)參數(shù),所以要使用方法入?yún)?lái)調(diào)用

lambda表達(dá)式使用一個(gè)空括號(hào)代表無(wú)參,所以建議,即使只有一個(gè)參數(shù),也放在括號(hào)里面
五、靜態(tài)內(nèi)部類(lèi)
或許有的時(shí)候,只是想將內(nèi)部類(lèi)隱藏起來(lái),并不需要內(nèi)部類(lèi)擁有外部類(lèi)的一個(gè)引用指針(即this),那么可以將內(nèi)部類(lèi)用static關(guān)鍵字去修飾,這樣內(nèi)部類(lèi)就不會(huì)有外部類(lèi)的引用了(無(wú)法使用到外部類(lèi)的方法和變量了),稱為靜態(tài)內(nèi)部類(lèi)
六、代理
代理(proxy)是一種比較高級(jí)的計(jì)技術(shù)
利用代理可以在運(yùn)行時(shí)創(chuàng)建實(shí)現(xiàn)了一組給定接口的新類(lèi)(在不知道要實(shí)現(xiàn)哪些接口時(shí))
到此這篇關(guān)于Java基礎(chǔ)之內(nèi)部類(lèi)與代理知識(shí)總結(jié)的文章就介紹到這了,更多相關(guān)Java內(nèi)部類(lèi)與代理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- java算法之靜態(tài)內(nèi)部類(lèi)實(shí)現(xiàn)雪花算法
- java內(nèi)部類(lèi)的定義與分類(lèi)示例詳解
- Java內(nèi)部類(lèi)和異常類(lèi)的概念以及使用
- java 利用反射獲取內(nèi)部類(lèi)靜態(tài)成員變量的值操作
- 如何用匿名內(nèi)部類(lèi)實(shí)現(xiàn) Java 同步回調(diào)
- Java內(nèi)部類(lèi)的實(shí)現(xiàn)原理與可能的內(nèi)存泄漏說(shuō)明
- java中的內(nèi)部類(lèi)內(nèi)部接口用法說(shuō)明
- Java面向?qū)ο笾畠?nèi)部類(lèi)案例講解
相關(guān)文章
作為Java程序員應(yīng)該掌握的10項(xiàng)技能
這篇文章主要介紹了作為Java程序員應(yīng)該掌握的10項(xiàng)技能,包括java的知識(shí)點(diǎn)與相關(guān)的技能,對(duì)于java的學(xué)習(xí)有不錯(cuò)的參考借鑒價(jià)值,需要的朋友可以參考下2015-05-05
關(guān)于泛型擦除問(wèn)題的解決--Mybatis查詢類(lèi)型轉(zhuǎn)換
這篇文章主要介紹了關(guān)于泛型擦除問(wèn)題的解決--Mybatis查詢類(lèi)型轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
Java實(shí)現(xiàn)一個(gè)簡(jiǎn)易版的多級(jí)菜單功能
這篇文章主要給大家介紹了關(guān)于Java如何實(shí)現(xiàn)一個(gè)簡(jiǎn)易版的多級(jí)菜單功能的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01
Java使用Swing實(shí)現(xiàn)一個(gè)模擬電腦計(jì)算器
Java Swing 是一個(gè)用于創(chuàng)建 Java GUI(圖形用戶界面)的框架,它提供了一系列的 GUI 組件和工具,可以用于創(chuàng)建桌面應(yīng)用程序,包括按鈕、文本框、標(biāo)簽、表格等等,本文給大家介紹了Java使用Swing實(shí)現(xiàn)一個(gè)模擬計(jì)算器,感興趣的同學(xué)可以自己動(dòng)手嘗試一下2024-05-05
java學(xué)生信息管理系統(tǒng)設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了java學(xué)生信息管理系統(tǒng)設(shè)計(jì),學(xué)生信息添加進(jìn)入數(shù)據(jù)庫(kù)的事務(wù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Java中Collection與Collections的區(qū)別詳解
這篇文章主要為大家詳細(xì)介紹了Java中Collection與Collections的區(qū)別,文中有詳細(xì)的代碼示例,具有一定的參考價(jià)值,感興趣的同學(xué)可以參考一下2023-06-06
Java系統(tǒng)環(huán)境變量配置全過(guò)程
本文介紹了如何配置Windows系統(tǒng)中的PATH和CLASSPATH環(huán)境變量,以及如何使用這些變量來(lái)運(yùn)行Java程序,步驟包括查看系統(tǒng)屬性、編輯環(huán)境變量、添加路徑、驗(yàn)證設(shè)置等,通過(guò)這些步驟,用戶可以永久性地保存PATH和CLASSPATH環(huán)境變量的設(shè)置,從而方便地運(yùn)行Java程序2024-11-11

