JAVA程序員編程基礎(chǔ)學(xué)習(xí)—內(nèi)部類的經(jīng)典總結(jié)

Java是一種可以撰寫跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言。Java 技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和安全性,廣泛應(yīng)用于PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)電話和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開發(fā)者專業(yè)社群。

給你學(xué)習(xí)路線:html-css-js-jq-javase-數(shù)據(jù)庫-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm

Java內(nèi)部類一、 含義在Java編程語言里,程序是由類(class)構(gòu)建而成的。在一個(gè)類的內(nèi)部也可以聲明類,我們把這樣的類叫做內(nèi)部類。

?

二、 作用實(shí)現(xiàn)了更好的封裝,我們知道,普通類(非內(nèi)部類)的訪問修飾符不能為private或protected,而內(nèi)部類可以。當(dāng)我們將內(nèi)部類聲明為private時(shí),只有外部類可以訪問內(nèi)部類,很好地隱藏了內(nèi)部類。

內(nèi)部類可以繼承(extends)或?qū)崿F(xiàn)(implements)其他的類或接口,而不受外部類的影響。內(nèi)部類可以直接訪問外部類的字段和方法,即使是用private修飾的,相反的,外部類不能直接訪問內(nèi)部類的成員。

三、 原理

內(nèi)部類是一個(gè)編譯時(shí)的概念,編譯后會(huì)生成兩個(gè)獨(dú)立的class文件,如下:?

?

小編推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【 六五零,五五四,六零七 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!

編譯后的文件如下圖:?

?

編譯后Outer.Inner被重命名為Outer$Inner,句點(diǎn)(.)被替換成了美元符號(hào)($)。

四、 分類

Java內(nèi)部類可分為成員內(nèi)部類、局部內(nèi)部類、匿名內(nèi)部類、靜態(tài)內(nèi)部類。

1) 成員內(nèi)部類

成員內(nèi)部類可以看成是外部類的一個(gè)成員,在成員內(nèi)部類中無法聲明靜態(tài)成員,但staticfinal字段是個(gè)例外。我們知道加載類時(shí),會(huì)先初始化靜態(tài)成員,如果成員內(nèi)部類有靜態(tài)成員,那么內(nèi)部類就會(huì)在外部類之前生成,而內(nèi)部類是為外部類服務(wù)的,內(nèi)部類在外部類之前就生成可能會(huì)脫離掌控。在實(shí)例化成員內(nèi)部類時(shí),成員內(nèi)部類會(huì)持有一個(gè)外部類當(dāng)前對(duì)象的引用,這樣在成員內(nèi)部類中就可以直接訪問外部類的成員,即使是private修飾的。?

?

運(yùn)行結(jié)果:

inner

outer

outer

成員內(nèi)部類對(duì)外部類對(duì)象的引用,是通過在this前面加上外部類的名字構(gòu)成的,這種形式叫作限定-this,out.println(outerName)與out.println(Outer.this.outerName)是等價(jià)的。

?

2) 局部內(nèi)部類局部內(nèi)部類的使用和成員內(nèi)部類的使用基本一致,只是局部內(nèi)部類定義在外部類的方法中,就像局部變量一樣,并不是外部類的成員。局部內(nèi)部類在方法外是無法訪問到的,但它的實(shí)例可以從方法中返回,并且實(shí)例在不再被引用之前會(huì)一直存在。局部內(nèi)部類也可以訪問所在方法的局部變量、方法參數(shù)等,限制是局部變量或方法參數(shù)只有在聲明為final時(shí)才能被訪問。?

?

小編推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【 六五零,五五四,六零七 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!

運(yùn)行結(jié)果:

outer:lalala

3) 匿名內(nèi)部類可以把匿名內(nèi)部類想象成是沒有類名的局部內(nèi)部類,匿名內(nèi)部類有以下特點(diǎn):

1、匿名內(nèi)部類不能有構(gòu)造器,匿名內(nèi)部類沒有類名,肯定無法聲明構(gòu)造器。

2、匿名內(nèi)部類必須繼承或?qū)崿F(xiàn)一個(gè)接口,指定給new的類型為匿名類的超類型,匿名類不能有顯示的extends或implements子句,也不能有任何修飾符。

3、匿名內(nèi)部類和成員內(nèi)部類、局部內(nèi)部類一樣,也不能聲明靜態(tài)成員。?

?

運(yùn)行結(jié)果:outer:lalala

4) 靜態(tài)內(nèi)部類靜態(tài)內(nèi)部類,有的書上也稱為嵌套類,聲明它時(shí)需要用static修飾符,靜態(tài)內(nèi)部類不同于前三種內(nèi)部類,靜態(tài)內(nèi)部類不會(huì)持有外部類當(dāng)前對(duì)象的引用,所以在靜態(tài)內(nèi)部類中無法訪問外部類的非靜態(tài)成員,可以這么說,靜態(tài)內(nèi)部類不依賴于外部類。

?

小編推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【 六五零,五五四,六零七 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!

以上就是關(guān)于java內(nèi)部類的一些知識(shí)總結(jié),歡迎分享,收藏,如果有遺漏歡迎在留言區(qū)補(bǔ)充,讓我們一起學(xué)習(xí)進(jìn)步~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容