亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Java系列之內(nèi)部類

crelaber / 3043人閱讀

摘要:方法內(nèi)部類就是局部內(nèi)部類,一般定義在類的局部位置,它可以訪問當(dāng)前代碼塊及外部類的所有變量。

今天溫習(xí)一下 Java 中的內(nèi)部類,內(nèi)部類一般有如下幾種:靜態(tài)內(nèi)部類、成員內(nèi)部類、匿名內(nèi)部類和方法內(nèi)部類,下文中將主要介紹靜態(tài)內(nèi)部類和成員內(nèi)部類,主要內(nèi)容如下:

概述

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

成員內(nèi)部類

匿名內(nèi)部類和方法內(nèi)部類

總結(jié)

概述

顧名思義內(nèi)部類就是在一個類內(nèi)部定義的類,它是內(nèi)部類是一個獨立的類,編譯之后會生成獨立的 .class 文件,其名稱前面會有外部類的類名稱以及 $ 符號,內(nèi)部類同樣可以使用 private 、default、protected、public 修飾,下面是內(nèi)部類的寫法,具體參考如下:

/**
 * 內(nèi)部類
 * @author jzman
 */
public class OutterClass {
    //靜態(tài)內(nèi)部類
    private static class StaticInnerClass{
        
    }
    //成員內(nèi)部類
    private class FieldInnerClass{
        
    }
    
    //匿名內(nèi)部類
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            
        }
    };
    
    private void method() {
        //方法內(nèi)部類(局部內(nèi)部類)
        class InnerClass{
            
        }
    }    
}
靜態(tài)內(nèi)部類

靜態(tài)內(nèi)部類可以有靜態(tài)成員和非靜態(tài)成員;

靜態(tài)內(nèi)部類可以直接調(diào)用外部類的靜態(tài)成員和靜態(tài)方法,但不能調(diào)用外部類的非靜態(tài)成員和非靜態(tài)方法;

在不相關(guān)類中,可以直接創(chuàng)建靜態(tài)內(nèi)部類的對象;

靜態(tài)內(nèi)部類與其外部類聯(lián)系很少,其創(chuàng)建基本不依賴與外部類。

/**
 * 靜態(tài)內(nèi)部類
 * @author jzman
 */
public class StaticInnerClassDemo {
    public static void main(String[] args) {
        //其他類可以直接創(chuàng)建某個非私有內(nèi)部類的實例
        OutterClass1.InnerClass innerClassB = new OutterClass1.InnerClass();
        InnerClass innerClassA = new InnerClass();
        innerClassA.testStaticInnerClass();
        //...
    }
}

//外部類
class OutterClass1{
    //非靜態(tài)成員變量
    int ageA = 18;
    //非靜態(tài)方法
    public void methodA() {
        
    }
    
    //靜態(tài)成員變量
    static int ageB = 18;
    //靜態(tài)方法
    public static void methodB() {
        
    }
    
    private void methodC() {
        //外部類調(diào)用靜態(tài)內(nèi)部類的方法
        InnerClass innerClass = new InnerClass();
        innerClass.testStaticInnerClass();
    }
    
    //靜態(tài)內(nèi)部類
    static class InnerClass{
        
        public void testStaticInnerClass(){
            //靜態(tài)內(nèi)部類不能訪問其外部類的非靜態(tài)成員變量和方法
//            System.out.println(ageA);
//            methodA();
            //靜態(tài)內(nèi)部類可以訪問其外部類的靜態(tài)成員和方法
            System.out.println(ageB);
            methodB();
        }
    }
}
成員內(nèi)部類

成員內(nèi)部類可以訪問所有外部類的成員;

成員內(nèi)部類對象的創(chuàng)建必須依賴于外部類對象,先有外部類才會有內(nèi)部類;

成員內(nèi)部類就是外部類的一個成員變量;

成員內(nèi)部類不能有靜態(tài)成員,但允許常量存在。

/**
 * 成員內(nèi)部類
 * @author jzman
 */
public class FieldInnerClassDemo {
    public static void main(String[] args) {
        //成員內(nèi)部類依賴與其外部類,不能越過外部類直接創(chuàng)建內(nèi)部類的實例
//        InnerClass innerClass = new InnerClass();
        //正確在其他類創(chuàng)建創(chuàng)建內(nèi)部類的實例
        OutterClass2 outterClass2 = new OutterClass2();
        OutterClass2.InnerClass innerClass = outterClass2.new InnerClass();
        innerClass.testFieldInnerClassMethod();
    }
}

//外部類
class OutterClass2{
    //非靜態(tài)成員變量
    int ageA = 18;
    //非靜態(tài)方法
    public void methodA() {
        
    }
    
    //靜態(tài)成員變量
    static int ageB = 18;
    //靜態(tài)方法
    public static void methodB() {
        
    }
    
    private void methodC() {
        //外部類調(diào)用成員內(nèi)部類的方法
        InnerClass innerClass = new InnerClass();
        innerClass.testFieldInnerClassMethod();
    }
    
    //成員內(nèi)部類
    class InnerClass{
        
        //成員內(nèi)部類不能有靜態(tài)成員
//        static int a = 10;
        //成員內(nèi)部類允許常量形式存在
        static final int b = 10;
        
        public void testFieldInnerClassMethod(){
            //成員內(nèi)部類可以直接訪問其外部類的所有成員變量及方法(靜態(tài)和非靜態(tài))
            System.out.println(ageA);
            methodA();
            System.out.println(ageB);
            methodB();
        }
    }
}
匿名內(nèi)部類和方法內(nèi)部類

匿名內(nèi)部類當(dāng)然是沒有確定的名稱,其實現(xiàn)都是在類體中具體實現(xiàn),最終返回相關(guān)類的一個匿名對象,由于最終返回的是一個匿名的實例,所以必須在匿名內(nèi)部類之后添加分號。方法內(nèi)部類就是局部內(nèi)部類,一般定義在類的局部位置,它可以訪問當(dāng)前代碼塊及外部類的所有變量。

總結(jié)

類之間的成員變量的互相調(diào)用實際上還是訪問對象的成員變量,如成員內(nèi)部類能夠訪問外部類的成員變量或方法是因為內(nèi)部類持有外部類的引用,一般通過 OutterClass.this 獲取外部類的對象,如果外部類想要訪問內(nèi)部類的成員變量或方法當(dāng)然也需要持有內(nèi)部類的引用,所以外部類訪問內(nèi)部類的成員變量或方法時,必須先創(chuàng)建內(nèi)部類的對象,然后通過對象來方位相應(yīng)的成員變量或方法。

可以選擇關(guān)注微信公眾號:jzman-blog 獲取最新更新,一起交流學(xué)習(xí)!

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

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

相關(guān)文章

  • java面向?qū)ο?下)

    內(nèi)部類 內(nèi)部類主要作用 內(nèi)部類提供了更好的封裝,可以吧內(nèi)部類隱藏在外部類之內(nèi),不允許同一個包中的其他類訪問該類。 內(nèi)部類成員可以直接訪問外部類的私有數(shù)據(jù),因為內(nèi)部類被當(dāng)成其外部類成員,同一個類的成員之間可以互相訪問,但外部類不能訪問內(nèi)部類的實現(xiàn)細(xì)節(jié)。 匿名內(nèi)部類適合用于創(chuàng)建那些僅需要使用一次的類。 定義內(nèi)部類與外部類的語法大致相同,內(nèi)部類除需要定義在其他類里面之外,還有兩點區(qū)別: 內(nèi)...

    awesome23 評論0 收藏0
  • Java 抽象類、接口、內(nèi)部類

    摘要:即使抽象類里不包含抽象方法,這個抽象類也不能創(chuàng)建實例抽象類可以包含成員變量方法普通方法和抽象方法構(gòu)造器初始化塊內(nèi)部類接口枚舉種成分。 抽象類 當(dāng)編寫一個類時,常常會為該類定義一些方法,這些方法用以描述該類的行為方式,那么這些方法都有具體的方法體。但在某些情況下,某個父類只是知道其子類應(yīng)該包含怎樣的方法,但無法準(zhǔn)確地知道這些子類如何實現(xiàn)這些方法。使用抽象方法即可滿足該要求:抽象方法是只有...

    miguel.jiang 評論0 收藏0
  • Java 基礎(chǔ)鞏固:內(nèi)部類的字節(jié)碼學(xué)習(xí)和實戰(zhàn)使用場景

    摘要:內(nèi)部類的使用場景上面介紹了中種內(nèi)部類的定義,接著我們介紹這些內(nèi)部類的一些使用場景。成員內(nèi)部類的使用場景普通內(nèi)部類可以訪問外部類的所有成員和方法,因此當(dāng)類需要使用類,同時需要訪問的成員方法時,可以將作為的成員內(nèi)部類。 文章出自:安卓進階學(xué)習(xí)指南 主要貢獻者: Cloud9527 Alex_趙 Struggle shixinzhang 讀完本文你將了解: [TOC] 通過反編譯...

    weij 評論0 收藏0

發(fā)表評論

0條評論

crelaber

|高級講師

TA的文章

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