最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中內部類的概念與分類詳解

 更新時間:2021年09月20日 10:34:10   作者:一朵花花  
一個類的定義放在另一個類的內部,這個類就叫做內部類,下面這篇文章主要給大家介紹了關于Java中內部類的概念與分類的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下

只能使用修飾限定符:public 和 默認 來修飾類

內部類概念

在 Java 中,將一個類定義在另一個類的內部,稱為內部類

就是在一個類內部進行其他類結構的嵌套操作

內部類也是封裝的一種體現

舉例:

//外部類
public class OutClass {

    //內部類
    class InnerClass{
        
    }
}

注意:內部類和外部類共享一個 java源文件,但是經過編譯之后,會形成各自單獨的字節(jié)碼文件

在這里插入圖片描述

內部類的分類:

成員內部類

在外部類中,內部類定義位置與外部類成員所處的位置相同,因此稱為成員內部類

成員內部類有:普通內部類和靜態(tài)內部類

普通內部類

未被 static 修飾的成員內部類

//外部類
public class OutClass {
    public void method(){

    }
    //普通內部類
    class InnerClass1{

    }
}

如何使用普通內部類??

先看普通類的使用:

package Date20210917;

public class Test1 {
    int a;
    public void method1(){

    }
    //普通內部類
    class InnerClass{
        int b;
        void method2() {

        }
    }
    public static void main(String[] args) {
        Test1 test1 = new Test1();
        test1.method1();
}

普通類:先構造對象—通過對象訪問類內部的成員

那么,我們可以試著 new 一個 InnerClass 的對象:

在這里插入圖片描述

我們發(fā)現并不可行,因為 InnerClass 也是 外部類的成員,所以我們在使用內部類時,需借助外部類的對象來創(chuàng)建內部類的對象

則正確操作:

public static void main(String[] args) {
    //普通類:先構造對象—通過對象訪問類 內部的成員
    Test1 test1 = new Test1();
    test1.method1();

    //普通內部類
    InnerClass innerClass = test1.new InnerClass();
    innerClass.method2();
}

不同文件下 普通內部類的使用:

package Date20210917;

//外部類
public class OutClass {
    //測試Test1 中的內部類的使用:
    void test(){
        Test1 test1 = new Test1();
        //要實例化 Test1 中內部類的對象
        //InnerClass;   編譯器不能識別,因為該類沒在此文件中
        Test1.InnerClass t = test1.new InnerClass();
    }
    public static void main(String[] args) {

    }
}

當內外部類出現同名變量時,使用就近原則~ 即:優(yōu)先訪問內部類的

public class Test1 {
    int a;
    int b;
    public void method1(){

    }
    //普通內部類
    class InnerClass{
        int b;
        void method2() {
            a = 10;
            method1();
            b = 66; //給內部類自己的 成員變量 b 賦值
        }
    }
}

內部類中給同名外部類成員變量賦值:

Test1.this.b = 88;

調試驗證:

在這里插入圖片描述

即:編譯后,對 method2 進行以下修改

修改前:

void method2() {
    a = 10;
    method1();
    b = 66; //給內部類自己的 成員變量 b 賦值
    Test1.this.b = 88;
}

修改后:

void method2(InnerClass this){
	this$0.a = 10;
	method1(this$0);
	this.b = 66;
	Test1.this.b = 88;
}

總結:

  1. 普通內部類對象必須在先有外部類對象前提下才能創(chuàng)建
  2. 外部類中,不能直接訪問內部類中的成員,如果要訪問必須先要創(chuàng)建內部類的對象
  3. 外部類中的任何成員都可以被在普通內部類方法中直接訪問
  4. 在內部類方法中訪問同名的成員時,優(yōu)先訪問自己的(就近原則),如果要訪問外部類同名的成員,必須:外部類名稱.this.同名成員 來訪問

靜態(tài)內部類

被 static 修飾的內部成員類稱為靜態(tài)內部類

public class Test2 {
    int a;
    int b;
    static int c;
    static void method1(){
        System.out.println("我是method()");
    }
    static class InnerClass{
        int d;
        static int e;
        void method2(){

        }
    }
}

靜態(tài)內部類對象的創(chuàng)建

1.同文件中創(chuàng)建:

//靜態(tài)成員變量的訪問
System.out.println(Test2.c);

//不需要借助外部類對象來創(chuàng)建
InnerClass innerClass = new InnerClass();

2.不同文件里 創(chuàng)建:

void test2(){
    //靜態(tài)成員變量的訪問:
    System.out.println(Test2.c);

    //靜態(tài)內部類對象 (類比靜態(tài)成員變量的訪問)
    Test2.InnerClass t = new Test2.InnerClass();
    //靜態(tài)內部類對象可以直接創(chuàng)建,不需要依賴外部類對象

}

靜態(tài)內部類方法里能否訪問外部類的對象?

在這里插入圖片描述

由上圖可得到:在靜態(tài)內部類中,只能訪問外部類中的靜態(tài)成員變量和靜態(tài)成員方法

注意事項:

  • 在內部類中只能訪問外部類中的靜態(tài)成員
  • 在同一文件中創(chuàng)建內部類對象時,可以直接創(chuàng)建,不需要借助外部類對象
  • 在不同文件中創(chuàng)建內部類對象時,也可直接創(chuàng)建:所在文件名稱.內部類名稱.對象名
  • 成員內部類,經過編譯之后會生成獨立的字節(jié)碼文件,命名格式為:外部類名稱$內部類名稱

在這里插入圖片描述

局部內部類

定義在外部類的方法體或者 { } 中,該種內部類只能在其定義的位置使用,一般很少使用

//外部類
public class OutClass {

    public void method(){
        //局部內部類
        class InnerClass3{

        }
    }
	{   //局部內部類
		class InnerClass4{

		}
    }
}

不能被訪問修飾限定符修飾:

在這里插入圖片描述

不能再局部內部類中定義靜態(tài)成員

在這里插入圖片描述

不能再局部內部類中定義靜態(tài)方法

在這里插入圖片描述

注意事項:

局部內部類只能在所定義的方法體內部使用不能被public、static等修飾符修飾編譯器也有自己獨立的字節(jié)碼文件,命名格式:外部類名字$x內部類名字.class,x是一個整數 匿名內部類(這里不做講解)

總結

到此這篇關于Java中內部類的概念與分類的文章就介紹到這了,更多相關Java內部類內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java新手教程之ArrayList的基本使用

    Java新手教程之ArrayList的基本使用

    ArrayList就是傳說中的動態(tài)數組,用MSDN中的說法,就是Array的復雜版本,這篇文章主要給大家介紹了關于Java新手教程之ArrayList基本使用的相關資料
    2021-06-06
  • Springboot es包版本異常解決方案

    Springboot es包版本異常解決方案

    這篇文章主要介紹了springboot 項目依賴 es包版本異常,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • SpringBoot整合mybatis-plus快速入門超詳細教程

    SpringBoot整合mybatis-plus快速入門超詳細教程

    mybatis-plus 是一個 Mybatis 的增強工具,在 Mybatis 的基礎上只做增強不做改變,為簡化開發(fā)、提高效率而生,本文給大家分享SpringBoot整合mybatis-plus快速入門超詳細教程,一起看看吧
    2021-09-09
  • 基于Properties文件中的空格問題

    基于Properties文件中的空格問題

    這篇文章主要介紹了Properties文件中的空格問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot項目部署到服務器上的方法(Jar包)

    SpringBoot項目部署到服務器上的方法(Jar包)

    這篇文章主要介紹了SpringBoot項目部署到服務器上的方法(Jar包),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Mybatis 中的一對一,一對多,多對多的配置原則示例代碼

    Mybatis 中的一對一,一對多,多對多的配置原則示例代碼

    這篇文章主要介紹了 Mybatis 中的一對一,一對多,多對多的配置原則示例代碼,需要的朋友可以參考下
    2017-03-03
  • Mybatis-Plus使用saveOrUpdate及問題解決方法

    Mybatis-Plus使用saveOrUpdate及問題解決方法

    本文主要介紹了Mybatis-Plus使用saveOrUpdate及問題解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • Java導出多個excel表打包到zip文件中供客戶端另存為窗口下載實現方法

    Java導出多個excel表打包到zip文件中供客戶端另存為窗口下載實現方法

    最近的項目有一個導出匯總數據的要求,考慮到用戶軟件的差異,所以要分別導出xls以及xlsx并且打包提供下載,下面這篇文章主要給大家介紹了關于Java導出多個excel表打包到zip文件中供客戶端另存為窗口下載的實現方法,需要的朋友可以參考下
    2023-12-12
  • Java HttpClient技術詳解

    Java HttpClient技術詳解

    Http協(xié)議的重要性相信不用我多說了,HttpClient相比傳統(tǒng)JDK自帶的URLConnection,增加了易用和靈活性(具體區(qū)別,日后我們再討論),它不僅是客戶端發(fā)送Http請求變得容易,而且也方便了開發(fā)人員測試接口(基于Http協(xié)議的),即提高了開發(fā)的效率,也方便提高代碼的健壯性
    2021-10-10
  • SpringBoot開發(fā)中的數據源詳解

    SpringBoot開發(fā)中的數據源詳解

    這篇文章主要介紹了SpringBoot開發(fā)中的數據源詳解,數據源(Data Source)顧名思義,數據的來源,是提供某種所需要數據的器件或原始媒體,在數據源中存儲了所有建立數據庫連接的信息,需要的朋友可以參考下
    2023-09-09

最新評論

镇宁| 延边| 会同县| 社旗县| 望都县| 弥渡县| 达尔| 吕梁市| 巨野县| 晋江市| 大宁县| 周宁县| 淄博市| 旌德县| 垦利县| 南安市| 西吉县| 凤庆县| 玉门市| 大洼县| 梅河口市| 名山县| 松江区| 赣州市| 沁水县| 申扎县| 富蕴县| 宜良县| 上思县| 拜城县| 保定市| 泸州市| 高陵县| 饶平县| 通化县| 城口县| 内丘县| 福安市| 汉寿县| 连云港市| 凤山市|