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

詳解Java內(nèi)部類與對象的打印概念和流程

 更新時間:2021年10月20日 11:10:30   作者:Luka.lh  
在 Java 中,可以將一個類定義在另一個類里面或者一個方法里面,這樣的類稱為內(nèi)部類。廣泛意義上的內(nèi)部類一般來說包括這四種:成員內(nèi)部類、局部內(nèi)部類、匿名內(nèi)部類和靜態(tài)內(nèi)部類

一、內(nèi)部類的概念

在 Java 中,可以將一個類定義在另一個類或者一個方法的內(nèi)部,前者稱為內(nèi)部類,后者稱為外部類。內(nèi)部類也是封裝的一種體現(xiàn)。

public class OutClass {//外部類
    class InnerClass{//內(nèi)部類
 
    }
}

注意事項:

1、內(nèi)部類一定是定義在class 類名{}之中的類,定義在class 類名{}之外的,哪怕是在一份文件中,也并不能稱為內(nèi)部類。例如:

public class A{
}
class B{
}
//A和B兩個類是獨立的,無內(nèi)外部類一說

2、內(nèi)部類和外部類共用同一個java源文件,但是經(jīng)過編譯之后,內(nèi)部類會形成單獨的字節(jié)碼文件。

二、內(nèi)部類的分類

public class OutClass {
    //普通內(nèi)部類
    class InnerClass1{
 
    }
    //靜態(tài)內(nèi)部類
    static class InnerClass2{
 
    }
    {
        //定義在實例代碼塊中的 局部內(nèi)部類
        class InnerClass3{
 
        }
    }
    static{
        //定義在靜態(tài)代碼塊中的 局部內(nèi)部類
        class InnerClass4{
 
        }
    }
    public void method(){
        //定義在方法中的 局部內(nèi)部類
        class InnerClass5{
 
        }
 
        {
            //方法中的普通代碼塊中也可以定義局部內(nèi)部類
            class InnerClass6{
 
            }
        }
    }
}

根據(jù)內(nèi)部類定義的位置不同,可以分為:

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

局部內(nèi)部類和匿名內(nèi)部類。

三、成員內(nèi)部類

1、普通內(nèi)部類

未被static修飾的成員內(nèi)部類。

public class OutClass {//外部類
    private int a;
    private int b;
    private int c;
 
    public void method1(){
        a=100;
        System.out.println(a);
    }
 
    public void method2(){
        System.out.println(b);
    }
 
    class InnerClass{      //普通內(nèi)部類
        private int c;     //與外部類成員變量名稱相同的內(nèi)部成員變量
        public void methodInner() {
            //在內(nèi)部類中可以直接訪問外部類任意限定符的成員變量和方法
            b = 150;
            method1();
            method2();
 
            //在訪問與外部類成員名稱相同的成員時,優(yōu)先訪問內(nèi)部類自己的成員
            c = 300;
            System.out.println(c);
            //要訪問外部類中的同名成員必須使用——— 外部類名.this.成員名  來訪問
            OutClass.this.c = 400;
            System.out.println(OutClass.this.c);
        }
    }
    public static void main(String[] args) {
        //創(chuàng)建內(nèi)部類對象
        OutClass.InnerClass innerclass1=new OutClass().new InnerClass();
        //也可以先創(chuàng)建外部類對象,再創(chuàng)建內(nèi)部類對象
        OutClass outclass=new OutClass();
        //注意當在不同文件中創(chuàng)建其內(nèi)部類對象一定需要加上該內(nèi)部類的外部類名,同一文件下可加可不加
        OutClass.InnerClass innerclass2=outclass.new InnerClass();
        innerclass2.methodInner();
    }
}

/*
100
150
300
400
*/

注意事項:

1、普通內(nèi)部類中可以直接訪問外部類中的所有方法。

2、普通內(nèi)部類成員的位置與外部類成員位置相同,都受public,private等限定符的限制。

3、在普通內(nèi)部類方法中訪問同名的成員時,優(yōu)先訪問自己的,如果要訪問外部類同名的成員,必須:外部類名稱.this.同名成員 來訪問。

4、要創(chuàng)建普通內(nèi)部類對象,要先創(chuàng)建外部類的對象。在創(chuàng)建內(nèi)部類對象時,如果該內(nèi)部類在當前文件,則在創(chuàng)建對象語句最前面不需要外部類名,如果在不同文件,那么一定要指明該內(nèi)部類的外部類名。

5、 普通內(nèi)部類中包含了一個指向外部類對象的引用。

6、外部類中,不能直接訪問內(nèi)部類中的成員,如果要訪問必須先要創(chuàng)建內(nèi)部類的對象。

public class OutClass1 {
    private int a;
 
    public void method(){
        System.out.println(c); //在外部類中直接訪問內(nèi)部類成員,編譯報錯
    }
 
    class InnerClass{
        private int c;
    }
}
public class OutClass1 {
    private int a;
    public void methodOut(){
        InnerClass I2=new InnerClass();//在外部類方法中創(chuàng)建內(nèi)部類對象可以直接創(chuàng)建
        System.out.println(I2.c);
    }
    class InnerClass{
         private int c;
    }
}

從堆和棧的角度來看內(nèi)部類和外部類:

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

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

public class OutClass {//外部類
    private int a;
    static int b;      //靜態(tài)變量
 
    public void method1(){
 
    }
    public static void method2(){  //靜態(tài)方法
 
    }
 
    static class InnerClass{       //靜態(tài)內(nèi)部類
        public void methodInner() {
            //在靜態(tài)內(nèi)部類中只能訪問外部類的靜態(tài)成員和方法
            //  a=100;編譯失敗,a不是外部類的成員變量
            b = 150;
            //  method1();編譯失敗,method1不是外部類的成員方法
            method2();
        }
    }
    public static void main(String[] args) {
        //靜態(tài)內(nèi)部類的創(chuàng)建
        InnerClass innerclass=new InnerClass();
        //成員訪問
        innerclass.methodInner();
    }
}

注意事項:

1、在內(nèi)部類中只能訪問外部類中的靜態(tài)成員。

2、創(chuàng)建靜態(tài)內(nèi)部類對象時,不需要先創(chuàng)建外部類對象。

3、成員內(nèi)部類,經(jīng)過編譯之后會生成自己獨立的字節(jié)碼文件,例如下:

四、局部內(nèi)部類

定義在外部類的方法體或者{}中,該種內(nèi)部類只能在其定義的位置使用。

public class OutClass {//外部類
     int a=10;
 
    public void method(){              //外部類方法
        int b=10;
        class InnerClass{              //局部內(nèi)部類,只能在該方法體內(nèi)部使用
            public void methodInnerClass(){
                System.out.println(a);
                System.out.println(b);
            }
        }
        InnerClass innerclass=new InnerClass();
        innerclass.methodInnerClass();
    }
    public static void main(String[] args) {
        //InnerClass innerclass=null; 編譯失敗
    }
}

注意事項:

1、局部內(nèi)部類只能在所定義的方法體內(nèi)部使用。

2、局部內(nèi)部類不能被public、static等限定符修飾。

3、同樣編譯之后局部內(nèi)部類會生成自己的字節(jié)碼文件。

命名格式:外部類名$x內(nèi)部類名.class, 其中x是一個整數(shù)。

五、對象的打印

public class Person {
    String name;
    String gender;
    int age;
    
    public Person(String name,String gender,int age){
        this.name=name;
        this.gender=gender;
        this.age=age;
    }
 
    public static void main(String[] args) {
        Person person=new Person("luka","man",21);
        System.out.println(person);
    }
}

打印結(jié)果: 并不是對象本身。

如果想要打印對象本身,那么需要重寫toString方法。

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
 public String toString() {           //重寫了toString方法
        return "[" + name + "," + gender + "," + age + "]";
    }
public class Person {
    String name;
    String gender;
    int age;
 
    public Person(String name,String gender,int age){
        this.name=name;
        this.gender=gender;
        this.age=age;
    }
 
    public String toString() {           //重寫了toString方法
        return "[" + name + "," + gender + "," + age + "]";
    }
 
    public static void main(String[] args) {
        Person person=new Person("luka","man",21);
        System.out.println(person);
    }
}

/*
執(zhí)行結(jié)果:
[luka,man,21]
*/

到此這篇關(guān)于詳解Java內(nèi)部類與對象的打印概念和流程的文章就介紹到這了,更多相關(guān)Java 內(nèi)部類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java實現(xiàn)一個簡單TCPSocket聊天室功能分享

    java實現(xiàn)一個簡單TCPSocket聊天室功能分享

    這篇文章主要為大家分享了java實現(xiàn)的一個簡單TCPSocket聊天室功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • java多線程詳細總結(jié)

    java多線程詳細總結(jié)

    以下小編就對java中的多線程進行了詳細的總結(jié)分析,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • Java實現(xiàn)簡單棋盤存檔和讀取功能

    Java實現(xiàn)簡單棋盤存檔和讀取功能

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡單棋盤存檔和讀取功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 解決get請求入?yún)NotNull驗證不生效問題

    解決get請求入?yún)NotNull驗證不生效問題

    這篇文章主要介紹了解決get請求入?yún)NotNull驗證不生效問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 解析SpringBoot中@Autowire注解的實現(xiàn)原理

    解析SpringBoot中@Autowire注解的實現(xiàn)原理

    在開發(fā)Java項目時,依賴注入是一種常見的實現(xiàn)方式,SpringBoot框架通過@Autowired注解來實現(xiàn)依賴注入的功能,本文將介紹SpringBoot中 Autowired注解實現(xiàn)的原理
    2023-06-06
  • Java經(jīng)典面試題匯總:多線程

    Java經(jīng)典面試題匯總:多線程

    本篇總結(jié)的是Java多線程相關(guān)的面試題,后續(xù)會持續(xù)更新,希望我的分享可以幫助到正在備戰(zhàn)面試的實習生或者已經(jīng)工作的同行,如果發(fā)現(xiàn)錯誤還望大家多多包涵,不吝賜教,謝謝
    2021-07-07
  • spring緩存代碼詳解

    spring緩存代碼詳解

    這篇文章主要介紹了spring緩存代碼詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 關(guān)于Controller 層返回值的公共包裝類的問題

    關(guān)于Controller 層返回值的公共包裝類的問題

    本文給大家介紹Controller 層返回值的公共包裝類-避免每次都包裝一次返回-InitializingBean增強,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2021-09-09
  • Java泛型的繼承和實現(xiàn)操作示例

    Java泛型的繼承和實現(xiàn)操作示例

    這篇文章主要介紹了Java泛型的繼承和實現(xiàn)操作,結(jié)合實例形式分析了java泛型類的繼承以及泛型接口的實現(xiàn)相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • MyBatis中的接口代理機制及其使用方式

    MyBatis中的接口代理機制及其使用方式

    這篇文章主要介紹了MyBatis中的接口代理機制及其使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06

最新評論

雷波县| 临夏市| 固镇县| 项城市| 灌云县| 化隆| 白朗县| 安徽省| 西畴县| 松原市| 德阳市| 固安县| 延长县| 吕梁市| 永丰县| 炉霍县| 克拉玛依市| 陈巴尔虎旗| 民丰县| 常德市| 攀枝花市| 和田县| 西青区| 射阳县| 新化县| 灵寿县| 肥乡县| 饶阳县| 金山区| 抚远县| 双辽市| 东丰县| 涿州市| 高邑县| 加查县| 南华县| 新田县| 施甸县| 汉沽区| 贵德县| 探索|