国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java內(nèi)部類詳解(含:成員內(nèi)部類、局部內(nèi)部類、匿名內(nèi)部類、靜態(tài)內(nèi)部類)

這篇具有很好參考價(jià)值的文章主要介紹了Java內(nèi)部類詳解(含:成員內(nèi)部類、局部內(nèi)部類、匿名內(nèi)部類、靜態(tài)內(nèi)部類)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

內(nèi)部類是什么?

字面意思,在類的內(nèi)部編寫的類就叫內(nèi)部類!即一個(gè)類的內(nèi)部又完整的嵌套了另一個(gè)類結(jié)構(gòu),被嵌套的類稱為內(nèi)部類(inner class),嵌套其他類的類稱為外部類(outer class)。

內(nèi)部類是類的第五大成員→【提示:類的五大成員是哪些?[屬性、方法、構(gòu)造器、代碼塊、內(nèi)部類]】

內(nèi)部類一般來說包括這四種:成員內(nèi)部類、局部內(nèi)部類、匿名內(nèi)部類和靜態(tài)內(nèi)部類。

官方給的內(nèi)部類優(yōu)點(diǎn)如下:
1.每個(gè)內(nèi)部類都能獨(dú)立的繼承一個(gè)接口的實(shí)現(xiàn),所以無論外部類是否已經(jīng)繼承了某個(gè)(接口的)實(shí)現(xiàn),對(duì)于內(nèi)部類都沒有影響。內(nèi)部類使得多繼承的解決方案變得完整;
2.方便將存在一定邏輯關(guān)系的類組織在一起,又可以對(duì)外界隱藏;
3.方便編寫事件驅(qū)動(dòng)程序;
4.方便編寫線程代碼。

注意:內(nèi)部類是學(xué)習(xí)的難點(diǎn),同時(shí)也是重點(diǎn),后面看底層源碼時(shí),有大量的內(nèi)部類。

一、成員內(nèi)部類:(在類的內(nèi)部方法的外部編寫的類就是成員內(nèi)部類)

成員內(nèi)部類特點(diǎn):

1.成員內(nèi)部類可以無條件訪問外部類的所有成員屬性和成員方法(包括private成員和靜態(tài)成員);

2.同名的屬性名/方法名訪問外部類時(shí) → 外部類.this.成員名

Outer.this.name

成員內(nèi)部類是依附外部類而存在的,也就是說,如果要?jiǎng)?chuàng)建成員內(nèi)部類的對(duì)象,前提是必須存在一個(gè)外部類的對(duì)象。所以在外部類訪問內(nèi)部類的時(shí)候必須先實(shí)例化外部類對(duì)象

		Outer outer= new outer();
		Inner inner = outer.new Inner();
        //或者如下一句代碼:
        Outer.Inner inner = new Outer().new Inner();

注意:

1.成員內(nèi)部類可以使用四種權(quán)限修飾符進(jìn)行修飾(四種權(quán)限修飾符:public(公有的) >protected(受保護(hù)的) > (default)(缺省/默認(rèn)的) > private(私有的));
2.成員內(nèi)部類中不能書寫靜態(tài)變量和方法。

詳見案例演示:

public class Outer {
    String name = "外部類的類名";
    static String type = "外部類的type屬性";
    private int item = 1;

    public static void show() {
        System.out.println("掉用外部類中的show方法");
    }
    public void print() {
        System.out.println("調(diào)用外部類中的打印方法");
    }

    //成員內(nèi)部類 可以使用權(quán)限修飾符進(jìn)行修飾
    public class Inner{
        //static double weight = 1.8;  //成員內(nèi)部類中不能使用static修飾變量和方法
        String name = "內(nèi)部類的類名";

        public void innerShow(){
            //成員內(nèi)部類可以直接訪問外部類的屬性和方法
            show();
            print();
            System.out.println(type);
            System.out.println(item);
            System.out.println("我是:" + name);
            //進(jìn)行特指訪問時(shí) 使用類名.this.變量名進(jìn)行訪問
            System.out.println("我是:" + Outer.this.name);

        }
    }

    public static void main(String[] args) {
        //成員內(nèi)部類對(duì)象的創(chuàng)建步驟
        //1.第一步需要實(shí)例化外部類對(duì)象
        //2.第二步正常實(shí)例化內(nèi)部類對(duì)象 但是new關(guān)鍵字要改成 外部類對(duì)象名.new
           /*Outer outer = new Outer();
            Inner inner = outer.new Inner();*/
        //或者這樣創(chuàng)建
        Outer.Inner inner = new Outer().new Inner();
        inner.innerShow();
    }
}

成員內(nèi)部類,jvm

二、局部內(nèi)部類 (編寫在方法的內(nèi)部的類稱之為局部內(nèi)部類,也可以稱為方法內(nèi)部類)

局部內(nèi)部類的特點(diǎn)

1.局部內(nèi)部類是定義在一個(gè)方法或者一個(gè)作用域里面的類,它和成員內(nèi)部類的區(qū)別在于局部內(nèi)部類的訪問僅限于方法內(nèi)或者該作用域內(nèi);
2.局部內(nèi)部類不可使用權(quán)限修飾符 靜態(tài)(static)修飾符進(jìn)行修飾 同局部變量相同;
3.局部內(nèi)部類可以直接訪問方法中的屬性;
4.局部內(nèi)部類 可以直接訪問方法外部類中屬性和方法;
5.局部內(nèi)部類 創(chuàng)建對(duì)象 要在方法內(nèi)部 局部內(nèi)部類的外部聲明。

詳見案例演示:

public class Partial {
    String name = "外部類的類名";
    String type = "外部類的type屬性";
    private int item = 1;

    public static void show() {
        System.out.println("掉用外部類中的show方法");
    }
    public void print() {
        System.out.println("調(diào)用外部類中的打印方法");
    }

    public void demo(){
        String name = "外部類方法deme()內(nèi)部的方法名";
        String type = "外部類方法deme()內(nèi)部的type屬性";
        /*編寫在方法的內(nèi)部的類稱之為局部內(nèi)部類
        局部內(nèi)部類不可使用權(quán)限修飾符 靜態(tài)修飾符進(jìn)行修飾 同局部變量相同
        局部內(nèi)部類與局部變量使用范圍一樣 在此方法內(nèi)部
        局部內(nèi)部類可以直接訪問方法中的屬性 重名時(shí)使用參數(shù)傳遞完成訪問*/
        class Inner{
            //局部內(nèi)部類 可以訪問方法外部類中屬性和方法
            String name = "局部類的類名";
            public void showInner(String name){
                show();
                print();
                System.out.println("我是:"+ type);
                System.out.println("我是:"+ Partial.this.type);
                System.out.println(item);
                System.out.println("我是:" + this.name);
                System.out.println("我是:" + name);
                System.out.println("我是:" + Partial.this.name);
            }
        }
        //局部內(nèi)部類 創(chuàng)建對(duì)象 要在方法內(nèi)部 局部內(nèi)部類的外部聲明
        Inner inner = new Inner();
        inner.showInner(name);
    }

    public static void main(String[] args) {
        Partial partial = new Partial();
        partial.demo();
    }
}

成員內(nèi)部類,jvm

三、匿名內(nèi)部類(注意:匿名內(nèi)部類只是沒有類名,其他的都是具備的)

匿名內(nèi)部類特點(diǎn)

匿名內(nèi)部類不能定義任何靜態(tài)成員、方法和類,只能創(chuàng)建匿名內(nèi)部類的一個(gè)實(shí)例。一個(gè)匿名內(nèi)部類一定是在new的后面,用其隱含實(shí)現(xiàn)一個(gè)接口或?qū)崿F(xiàn)一個(gè)類。

詳見案例演示:

 // 實(shí)現(xiàn)關(guān)系下的匿名內(nèi)部類:
interface Dao {
	void show();
}

public class AnonymousDemo {
    //編寫回調(diào)方法 :callInner
    public void callInner(){
        // 接口關(guān)系下的匿名內(nèi)部類
        new Dao(){
            //實(shí)現(xiàn)子類 但是沒有名字 所以叫匿名內(nèi)部類
            @Override
            public void show() {
                System.out.println("接口方法...");
            }
        }.show();
    }
}
// 測試:
public class Demo {
    public static void main(String[] args) {
        AnonymousDemo anonymousDemo = new AnonymousDemo();
        anonymousDemo.callInner();
    }
}

匿名內(nèi)部類可用于給方法傳遞實(shí)參,演示如下:

interface Dao {
	void show();
}

public class AnonymousDemo {
    //編寫回調(diào)方法:callInner 參數(shù)類型為接口Dao
    private static void callInner(Dao d) {
        d.show();
    }

    public static void main(String[] args) {
        callInner(new Dao() {//接口回調(diào)

            //實(shí)現(xiàn)子類 但是沒有名字 所以叫匿名內(nèi)部類
            @Override
            public void show() {
                System.out.println("匿名內(nèi)部類用于給方法傳遞實(shí)參");
            }
        });
    }
    
}

或許有些難以理解,其實(shí)過程并不復(fù)雜。
說明:首先有一個(gè)接口,然后在使用的類中編寫了一個(gè)方法(參數(shù)類型是接口對(duì)象),并使用接口中未實(shí)現(xiàn)的方法。
我們調(diào)用此方法直接構(gòu)造一個(gè)接口對(duì)象傳入,此時(shí)會(huì)自動(dòng)生成一個(gè)此接口的子類(匿名內(nèi)部類)實(shí)現(xiàn)接口中的方法。本質(zhì)傳入的類便是此時(shí)的匿名內(nèi)部類。

四、靜態(tài)內(nèi)部類(在類中編寫的以static修飾的類稱為靜態(tài)內(nèi)部類)

靜態(tài)內(nèi)部類特點(diǎn)

1.靜態(tài)內(nèi)部類也是定義在另一個(gè)類里面的類,只不過在類的前面多了一個(gè)關(guān)鍵字static;
2.靜態(tài)內(nèi)部類是不需要依賴于外部類的,這點(diǎn)和類的靜態(tài)成員屬性有點(diǎn)類似,并且它不能使用外部類的非static成員變量或者方法;
3.靜態(tài)內(nèi)部類中即能聲明靜態(tài)成員也可以聲明非靜態(tài)成員。

詳見案例演示:

public class Static {
    static String name = "外部類的類名";
    //靜態(tài)內(nèi)部類中不能訪問外部類非靜態(tài)成員
    String type = "外部類的type屬性";

    public static class Inner{
        //四種權(quán)限修飾符可以修飾靜態(tài)內(nèi)部類
        public String name = "靜態(tài)內(nèi)部類的類名";
        static double weight = 1.8;
        String type = "靜態(tài)內(nèi)部類的type屬性";
        public void show(){
            System.out.println("我是:" + weight);
            System.out.println("我是:" + type);
            System.out.println("我是:" + name);
            //System.out.println("我是:" + Static.type);//靜態(tài)內(nèi)部類中不能訪問外部類非靜態(tài)成員
            System.out.println("我是:" + Static.name);
        }
    }

    public static void main(String[] args) {
        //靜態(tài)內(nèi)部類可以直接實(shí)例化 不需要依附于外部類
        Inner inner = new Inner();
        inner.show();
    }
}

成員內(nèi)部類,jvm

有問題大家一起提出,我們共同學(xué)習(xí)、共同成長?。。?br> 歡迎評(píng)論區(qū)留言***?文章來源地址http://www.zghlxwxcb.cn/news/detail-856664.html

到了這里,關(guān)于Java內(nèi)部類詳解(含:成員內(nèi)部類、局部內(nèi)部類、匿名內(nèi)部類、靜態(tài)內(nèi)部類)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【C++】類和對(duì)象(下篇)--->再識(shí)構(gòu)造函數(shù),static成員,友元,內(nèi)部類,匿名對(duì)象

    【C++】類和對(duì)象(下篇)--->再識(shí)構(gòu)造函數(shù),static成員,友元,內(nèi)部類,匿名對(duì)象

    目錄 一、構(gòu)造函數(shù) ?1、構(gòu)造函數(shù)體賦值 ?2、初始化列表 ?3、explicit 二、Static 成員 ?1、概念 ?2、特性 三、友元 ?1、友元函數(shù) ?2、友元類 四、內(nèi)部類 ?1、概念 ?2、特性 五、匿名對(duì)象 六、拷貝對(duì)象時(shí)的一些編譯器優(yōu)化 在創(chuàng)建對(duì)象時(shí),編譯器通過調(diào)用構(gòu)造函數(shù),給對(duì)

    2024年02月13日
    瀏覽(23)
  • 【C++入門到精通】C++入門 —— 類和對(duì)象(初始化列表、Static成員、友元、內(nèi)部類、匿名對(duì)象)

    【C++入門到精通】C++入門 —— 類和對(duì)象(初始化列表、Static成員、友元、內(nèi)部類、匿名對(duì)象)

    目錄 一、初始化列表 ?初始化列表概念 ?初始化列表的優(yōu)點(diǎn) ?使用場景 ?explicit 二、Static成員 ?Static成員概念 ??靜態(tài)數(shù)據(jù)成員: ??靜態(tài)函數(shù)成員: ?使用靜態(tài)成員的優(yōu)點(diǎn) ?使用靜態(tài)成員的注意事項(xiàng) 三、友元 ?友元的概念 ?類友元 ?函數(shù)友元 ?四、內(nèi)部類 ?

    2024年02月14日
    瀏覽(16)
  • 漲知識(shí)-關(guān)于局部內(nèi)部類訪問局部變量

    局部內(nèi)部類訪問局部變量必須用final修飾 局部內(nèi)部類在訪問它所在方法中的局部變量必須用final修飾,為什么? 因?yàn)楫?dāng)調(diào)用這個(gè)方法時(shí),局部變量如果沒有final修飾,它的生命周期和方法的生命周期是一樣的, 當(dāng)方法彈棧時(shí),這個(gè)局部變量也會(huì)消失。 那么如果局部內(nèi)部類對(duì)象

    2024年02月03日
    瀏覽(22)
  • 【C++】:類和對(duì)象(下):explicit || 再談構(gòu)造函數(shù) || static成員 || 友元 || 內(nèi)部類 || 匿名對(duì)象 || 拷貝對(duì)象時(shí)的編譯器優(yōu)化問題 || 再次理解類和對(duì)象

    【C++】:類和對(duì)象(下):explicit || 再談構(gòu)造函數(shù) || static成員 || 友元 || 內(nèi)部類 || 匿名對(duì)象 || 拷貝對(duì)象時(shí)的編譯器優(yōu)化問題 || 再次理解類和對(duì)象

    ??類和對(duì)象(下篇) ??【本節(jié)目標(biāo)】 ??1. 再談構(gòu)造函數(shù) ??2. Static成員 ??3. 友元 ??4. 內(nèi)部類 ??5.匿名對(duì)象 ??6.拷貝對(duì)象時(shí)的一些編譯器優(yōu)化 ??7. 再次理解類和對(duì)象 ??1.1 構(gòu)造函數(shù)體賦值 在創(chuàng)建對(duì)象時(shí),編譯器通過調(diào)用構(gòu)造函數(shù),給對(duì)象中各個(gè)成員變量一個(gè)合適的初始值

    2024年01月21日
    瀏覽(26)
  • Java成員變量(全局變量)和局部變量

    在Java中變量類型有 成員變量 、 局部變量 和 靜態(tài)變量(類變量、static變量) ,本篇文章主要介紹成員變量(全局變量)和局部變量的區(qū)別。 根據(jù)變量的作用范圍,將程序中的變量分為成員變量(全局變量)和局部變量。 一、成員變量(全局變量) 成員變量(全局變量):

    2024年02月04日
    瀏覽(35)
  • Java 成員變量與局部變量有什么區(qū)別?

    Java 成員變量與局部變量有什么區(qū)別?

    節(jié)選自JavaGuide(Github 標(biāo)星 134k star!「Java學(xué)習(xí) + 面試指南」一份涵蓋大部分 Java 程序員所需要掌握的核心知識(shí)) 語法形式 :從語法形式上看,成員變量是屬于類的,而局部變量是在代碼塊或方法中定義的變量或是方法的參數(shù);成員變量可以被 public , private , static 等修飾符所修

    2024年02月05日
    瀏覽(27)
  • Java匿名內(nèi)部類

    Java中的匿名內(nèi)部類是一種可以在聲明時(shí)直接創(chuàng)建對(duì)象的內(nèi)部類。這種內(nèi)部類沒有名字,通常用來簡化代碼,特別是在定義事件處理程序和監(jiān)聽器方面非常有用。 需要注意的是,匿名內(nèi)部類不能有構(gòu)造函數(shù),因?yàn)樗鼪]有名字。同時(shí),匿名內(nèi)部類可以訪問外部類的成員變量和方

    2024年02月10日
    瀏覽(13)
  • 【Java基礎(chǔ)】匿名內(nèi)部類

    ??專欄【Java基礎(chǔ)】 ??喜歡的詩句:更喜岷山千里雪 三軍過后盡開顏。 ??音樂分享【The?truth?that?you?leave】 大一同學(xué)小吉,歡迎并且感謝大家指出我的問題?? 目錄 ??什么是匿名內(nèi)部類 ??為什么要使用匿名內(nèi)部類 ??詳細(xì)解釋 ??????不使用匿名內(nèi)部類 ??????使

    2024年02月05日
    瀏覽(25)
  • Java 匿名內(nèi)部類

    在 Java 中,匿名內(nèi)部類是一種可以在創(chuàng)建對(duì)象時(shí)直接定義內(nèi)部類的方式,而不需要單獨(dú)定義一個(gè)類。它通常用于創(chuàng)建實(shí)現(xiàn)某個(gè)接口或繼承某個(gè)類的對(duì)象。 Java 匿名內(nèi)部類是一種可以在創(chuàng)建對(duì)象時(shí)直接定義內(nèi)部類的方式,而不需要單獨(dú)定義一個(gè)類。它通常用于創(chuàng)建實(shí)現(xiàn)某個(gè)接口

    2024年02月07日
    瀏覽(18)
  • 【Java】匿名內(nèi)部類開發(fā)使用場景

    使用前面創(chuàng)建子類或者實(shí)現(xiàn)類的方式來編寫代碼,如下: AnimalParent.java Dog.java Cat.java Test.java 問題:上述代碼如果有很多的子類,要?jiǎng)?chuàng)建很多子類,還要繼承 重寫父類的抽象方法 解決:使用匿名內(nèi)部類(不需要?jiǎng)?chuàng)建子類或者實(shí)現(xiàn)類) AnimalParent.java Test.java 上述代碼使用的匿名

    2024年02月07日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包