成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

內(nèi)部類和靜態(tài)嵌套類

hsluoyz / 2519人閱讀

摘要:嵌套類增加了封裝性內(nèi)部類和靜態(tài)嵌套類的不同根源來自于,最大區(qū)別在于訪問外部類成員的權(quán)限。靜態(tài)嵌套類修飾符使得嵌套類對象成為外部類的靜態(tài)成員,與外部類直接關(guān)聯(lián)。

術(shù)語規(guī)范:按照官方文檔,定義在外部類(封裝類)內(nèi)部的類稱之為nested class,根據(jù)是否被static關(guān)鍵字修飾又分為兩類:static nested classes 和 inner classes。

class OuterClass {

    static class StaticNestedClass {}
    class InnerClass {}
}

使用嵌套類的好處在于:

當(dāng)某個(gè)類為旁類專用時(shí),將其寫成嵌套類能使得代碼結(jié)構(gòu)更緊湊。

嵌套類增加了封裝性

內(nèi)部類和靜態(tài)嵌套類的不同根源來自于static,最大區(qū)別在于訪問外部類成員的權(quán)限。

1.靜態(tài)嵌套類

static修飾符使得嵌套類對象成為外部類的靜態(tài)成員,與外部類直接關(guān)聯(lián)。

這樣靜態(tài)嵌套類作為一個(gè)靜態(tài)成員,僅能訪問外部類的靜態(tài)成員,因?yàn)橥獠款愔械姆庆o態(tài)成員與外部類對象相關(guān),靜態(tài)嵌套類就不能訪問他們,這使得靜態(tài)嵌套類的功能變的很弱,可用之處很少。

另外因?yàn)殪o態(tài)嵌套類是依附于外部類而非外部類對象的,所以不同的外部類對象共享一個(gè)靜態(tài)嵌套類,這一點(diǎn)與內(nèi)部類不同,可以用來包裝main方法。

靜態(tài)嵌套類的聲明示例:

OuterClass.StaticNestedClass nestedObject =
     new OuterClass.StaticNestedClass();
2.內(nèi)部類

沒有static修飾意味著一個(gè)內(nèi)部類是和外部類對象關(guān)聯(lián)的,也可以說一個(gè)內(nèi)部類對象存在于外部類對象中,是外部類對象的一個(gè)成員,因此內(nèi)部類對象可以訪問外部類對象的全部成員,包括私有成員。

因?yàn)閮?nèi)部類依賴于外部類對象而存在,所以不能定義任何靜態(tài)成員。

內(nèi)部類對象可以訪問外部類的所有成員變量,包括私有成員,這是Java閉包的原理;

因?yàn)閮?nèi)部類隱含對外部類的引用,所以外部類就不能被JVM的垃圾回收機(jī)制自動(dòng)垃圾回收。

不同的外部類對象之間沒有公共的內(nèi)部類對象成員。

內(nèi)部類的聲明示例:

OuterClass.InnerClass innerObject = new OuterObject().new InnerClass();
3.變量遮蔽Shadowing

嵌套類和封裝類以及局部方法區(qū)的變量作用域有重疊,如果有同名變量將發(fā)生變量遮蔽。

public class ShadowTest {

    public int x = 0;

    class FirstLevel {

        public int x = 1;

        void methodInFirstLevel(int x) {
            System.out.println("x = " + x);
            System.out.println("this.x = " + this.x);
            System.out.println("ShadowTest.this.x = " + ShadowTest.this.x);
        }
    }

    public static void main(String... args) {
        ShadowTest st = new ShadowTest();
        ShadowTest.FirstLevel fl = st.new FirstLevel();
        fl.methodInFirstLevel(23);
    }
}

注意這里對3種不同變量的引用方式,結(jié)果如下

x = 23                  //1.  局部變量
this.x = 1              //2.內(nèi)部類變量
ShadowTest.this.x = 0   //3.外部類變量

內(nèi)部類中this指針指向內(nèi)部類自己,ShadowTest.this則指向外部類對象;

不加修飾的變量,將執(zhí)行就近匹配原則;如果名稱相同將發(fā)生變量遮蔽效應(yīng);為了防止隱患,內(nèi)部類引用外部類對象時(shí)應(yīng)使用第三種方法。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64740.html

相關(guān)文章

  • Java? 教程(嵌套

    嵌套類 Java編程語言允許你在另一個(gè)類中定義類,這樣的類稱為嵌套類,如下所示: class OuterClass { ... class NestedClass { ... } } 術(shù)語:嵌套類分為兩類:靜態(tài)和非靜態(tài),聲明為static的嵌套類稱為靜態(tài)嵌套類,非靜態(tài)嵌套類稱為內(nèi)部類。 class OuterClass { ... stati...

    Cheng_Gang 評論0 收藏0
  • java內(nèi)部總結(jié)

    摘要:每個(gè)內(nèi)部類都能獨(dú)立地繼承一個(gè)接口,而無論外部類是否已經(jīng)繼承了某個(gè)接口。因此,內(nèi)部類使多重繼承的解決方案變得更加完整。內(nèi)部類中的與其他類一樣是指的本身。但是靜態(tài)內(nèi)部類卻沒有。 問題:內(nèi)部類、靜態(tài)內(nèi)部類區(qū)別、使用場景? 1.靜態(tài)內(nèi)部類可以有靜態(tài)成員(方法,屬性),而非靜態(tài)內(nèi)部類則不能有靜態(tài)成員(方法,屬性)。 2.靜態(tài)內(nèi)部類只能夠訪問外部類的靜態(tài)成員,而非靜態(tài)內(nèi)部類則可以訪問外部類的所有...

    xiaodao 評論0 收藏0
  • Java進(jìn)階3 —— 接口設(shè)計(jì)原則

    摘要:首當(dāng)其沖的便是接口中的每個(gè)聲明必須是即便不指定也是,并且不能設(shè)置為非,詳細(xì)規(guī)則可參考可見性部分介紹。函數(shù)式接口有著不同的場景,并被認(rèn)為是對編程語言的一種強(qiáng)大的擴(kuò)展。抽象類與中的接口有些類似,與中支持默認(rèn)方法的接口更為相像。 原文鏈接:http://www.javacodegeeks.com/2015/09/how-to-design-classes-and-interfaces.htm...

    lauren_liuling 評論0 收藏0
  • Java知識點(diǎn)總結(jié)(三個(gè)步驟)

    摘要:對于一個(gè)名為的外圍類和一個(gè)的內(nèi)部類,在編譯成功后,會(huì)出現(xiàn)這樣兩個(gè)文件和。 Java知識點(diǎn)總結(jié)(三個(gè)步驟) @(Java知識點(diǎn)總結(jié))[Java, Java面向?qū)ο骫 [toc] 1-定義類 修飾符 訪問修飾符: public protected default private 其他修飾符 abstract:抽象類不能實(shí)例化,專門用于繼承的類final:最終類不能被繼承 類名(駝峰命名...

    syoya 評論0 收藏0
  • Java內(nèi)部(Inner Class)小記

    摘要:要注意的是,成員內(nèi)部類不能含有的變量和方法。匿名內(nèi)部類是唯一一種沒有構(gòu)造器的類。靜態(tài)嵌套類又叫靜態(tài)局部類嵌套內(nèi)部類,就是修飾為的內(nèi)部類。以上是對內(nèi)部類的一些學(xué)習(xí)和總結(jié),紕漏之處希望各位小伙伴友情指點(diǎn),共同進(jìn)步。 內(nèi)部類(inner class)是定義在另一個(gè)類中的類,類名不需要和文件夾相同。但為什么要使用內(nèi)部類呢?其主要原因有以下三點(diǎn):  1.內(nèi)部類方法可以訪問該類定義所在的作用域中的...

    jackzou 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<