国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

hsluoyz / 2522人閱讀

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

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

class OuterClass {

    static class StaticNestedClass {}
    class InnerClass {}
}

使用嵌套類的好處在于:

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

嵌套類增加了封裝性

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

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

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

這樣靜態(tài)嵌套類作為一個靜態(tài)成員,僅能訪問外部類的靜態(tài)成員,因為外部類中的非靜態(tài)成員與外部類對象相關,靜態(tài)嵌套類就不能訪問他們,這使得靜態(tài)嵌套類的功能變的很弱,可用之處很少。

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

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

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

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

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

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

因為內(nèi)部類隱含對外部類的引用,所以外部類就不能被JVM的垃圾回收機制自動垃圾回收。

不同的外部類對象之間沒有公共的內(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ā)生變量遮蔽效應;為了防止隱患,內(nèi)部類引用外部類對象時應使用第三種方法。

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

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

相關文章

  • Java? 教程(嵌套

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

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

    摘要:每個內(nèi)部類都能獨立地繼承一個接口,而無論外部類是否已經(jīng)繼承了某個接口。因此,內(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進階3 —— 接口設計原則

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

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

    摘要:對于一個名為的外圍類和一個的內(nèi)部類,在編譯成功后,會出現(xiàn)這樣兩個文件和。 Java知識點總結(jié)(三個步驟) @(Java知識點總結(jié))[Java, Java面向?qū)ο骫 [toc] 1-定義類 修飾符 訪問修飾符: public protected default private 其他修飾符 abstract:抽象類不能實例化,專門用于繼承的類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)部類的一些學習和總結(jié),紕漏之處希望各位小伙伴友情指點,共同進步。 內(nèi)部類(inner class)是定義在另一個類中的類,類名不需要和文件夾相同。但為什么要使用內(nèi)部類呢?其主要原因有以下三點:  1.內(nèi)部類方法可以訪問該類定義所在的作用域中的...

    jackzou 評論0 收藏0

發(fā)表評論

0條評論

hsluoyz

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<