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

資訊專欄INFORMATION COLUMN

內部類和靜態嵌套類

hsluoyz / 2513人閱讀

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

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

class OuterClass {

    static class StaticNestedClass {}
    class InnerClass {}
}

使用嵌套類的好處在于:

當某個類為旁類專用時,將其寫成嵌套類能使得代碼結構更緊湊。

嵌套類增加了封裝性

內部類和靜態嵌套類的不同根源來自于static,最大區別在于訪問外部類成員的權限。

1.靜態嵌套類

static修飾符使得嵌套類對象成為外部類的靜態成員,與外部類直接關聯。

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

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

靜態嵌套類的聲明示例:

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

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

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

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

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

不同的外部類對象之間沒有公共的內部類對象成員。

內部類的聲明示例:

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

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

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種不同變量的引用方式,結果如下

x = 23                  //1.  局部變量
this.x = 1              //2.內部類變量
ShadowTest.this.x = 0   //3.外部類變量

內部類中this指針指向內部類自己,ShadowTest.this則指向外部類對象;

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64740.html

相關文章

  • Java? 教程(嵌套

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

    Cheng_Gang 評論0 收藏0
  • java內部總結

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

    xiaodao 評論0 收藏0
  • Java進階3 —— 接口設計原則

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

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

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

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

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

    jackzou 評論0 收藏0

發表評論

0條評論

hsluoyz

|高級講師

TA的文章

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