色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

Java中靜態(tài)內(nèi)部類和非靜態(tài)內(nèi)部類有什么區(qū)別?

在介紹區(qū)別之前,首先把概念理一下,Java允許在一個(gè)類中定義另一個(gè)類,這樣的類被稱為嵌套類,而嵌套類又可分為四種:

  • 靜態(tài)嵌套類-聲明為另一個(gè)類的靜態(tài)成員

  • 內(nèi)部類-聲明為另一個(gè)類的實(shí)例成員

  • 本地內(nèi)部類-聲明在一個(gè)類的實(shí)例方法中

  • 匿名內(nèi)部類-類似本地內(nèi)部類,但它是表達(dá)式,定義并返回一個(gè)只使用一次的對(duì)象

具體的用法,可以查看Oracle提供的JavaTutorial中的[ClassesandObjects]這一節(jié),這里就不在寫了,下面看下各種嵌套類的特點(diǎn)和區(qū)別。

靜態(tài)嵌套類


  • 與類方法和字段一樣,與外部類相關(guān)聯(lián)

  • 無(wú)法直接訪問(wèn)外部類的實(shí)例方法或字段

  • 除了位于外部類的命名空間中,在行為上與普通頂級(jí)類無(wú)異

  • 它更多的目的是為了方便打包

內(nèi)部類


  • 與實(shí)例方法和字段一樣,與外部類的實(shí)例相關(guān)聯(lián)

  • 可以直接訪問(wèn)該實(shí)例的私有方法和字段

  • 無(wú)法定義自己的任何靜態(tài)成員

  • 不能聲明interface,因?yàn)榻涌诒举|(zhì)是靜態(tài)的

本地內(nèi)部類


  • 它是在塊中定義的類,塊就是使用成對(duì)的大括號(hào)組成語(yǔ)句,比如for循環(huán)

  • 類似內(nèi)部類,非靜態(tài),可訪問(wèn)外部類的私有成員

  • 此外可訪問(wèn)局部變量和參數(shù),但它們必須為final類型

  • 可以聲明靜態(tài)的常量變量

匿名內(nèi)部類


  • 主要提供更簡(jiǎn)潔和方便的代碼來(lái)使用本地內(nèi)部類,在聲明一個(gè)類的同時(shí)并實(shí)例化

  • 與本地內(nèi)部類類似,可訪問(wèn)final類型的局部變量

  • 與內(nèi)部類類似,可訪問(wèn)外部類的私有成員

  • 不能聲明構(gòu)造函數(shù),但可以聲明一個(gè)用于初始的

  • 此外可以聲明字段、額外的方法和本地類


為什么使用嵌套類

使用嵌套類大概有三個(gè)原因:

  • 邏輯分組-如果一個(gè)類只對(duì)另一個(gè)類有用,尤其是它不會(huì)在任何其他類中使用時(shí),使用嵌套類是將兩者是最合邏輯的。還能簡(jiǎn)化包結(jié)構(gòu),不必再新建一個(gè)文件

  • 增強(qiáng)封裝-有兩個(gè)頂級(jí)類A和B,其中B需要訪問(wèn)A中聲明為private的成員,就可以通過(guò)將B嵌套在類A中實(shí)現(xiàn),此外對(duì)于外面的世界B是隱藏的

  • 代碼更易讀和可維護(hù)-嵌套使得代碼更接近使用它的位置,帶來(lái)更易讀和可維護(hù)的代碼

何時(shí)使用嵌套類、本地類、匿名類

當(dāng)類只用于外部類并且它獨(dú)立于外部類的(私有)成員時(shí),使用靜態(tài)嵌套類;如果需要訪問(wèn)外部類的私有成員時(shí),則使用非靜態(tài)嵌套類,即內(nèi)部類。

比如,LinkedList<E>的Node<E>嵌套類,它既不需要被外面的類訪問(wèn),又不需要訪問(wèn)外部類的成員,所以它被聲明成了靜態(tài)嵌套類;而其中的ListItr迭代器實(shí)現(xiàn)類,它需要訪問(wèn)LinkedList內(nèi)部受限的成員,所以聲明成了內(nèi)部類。

本地內(nèi)部類,可以看作是Java提供的閉包,而匿名內(nèi)部類可以看作是更方便的創(chuàng)建和使用本地內(nèi)部類的方法,通常將其當(dāng)作方法參數(shù),用于回調(diào)。

常見與GUI編程中,比如,在監(jiān)聽窗口關(guān)閉事件時(shí),會(huì)這樣寫addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){TODO}});

以上就是我的理解,可能有誤,歡迎評(píng)論區(qū)交流,指正啊~

持續(xù)分享Java源碼分析,造造輪子的文章以及對(duì)編程、架構(gòu)等方面的看法,交流-「頓悟源碼」