欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間: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)部類
 
    }
}

注意事項(xiàng):

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

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

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

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

public class OutClass {
    //普通內(nèi)部類
    class InnerClass1{
 
    }
    //靜態(tài)內(nèi)部類
    static class InnerClass2{
 
    }
    {
        //定義在實(shí)例代碼塊中的 局部內(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();
 
            //在訪問與外部類成員名稱相同的成員時(shí),優(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();
        //注意當(dāng)在不同文件中創(chuàng)建其內(nèi)部類對象一定需要加上該內(nèi)部類的外部類名,同一文件下可加可不加
        OutClass.InnerClass innerclass2=outclass.new InnerClass();
        innerclass2.methodInner();
    }
}

/*
100
150
300
400
*/

注意事項(xiàng):

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

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

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

4、要創(chuàng)建普通內(nèi)部類對象,要先創(chuàng)建外部類的對象。在創(chuàng)建內(nèi)部類對象時(shí),如果該內(nèi)部類在當(dāng)前文件,則在創(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)部類成員,編譯報(bào)錯
    }
 
    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();
    }
}

注意事項(xiàng):

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

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

3、成員內(nèi)部類,經(jīng)過編譯之后會生成自己獨(dú)立的字節(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; 編譯失敗
    }
}

注意事項(xiàng):

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里面獲取map的key和value的方法

    詳解JAVA里面獲取map的key和value的方法

    這篇文章主要介紹了詳解JAVA里面獲取map的key和value的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • selenium+java破解極驗(yàn)滑動驗(yàn)證碼的示例代碼

    selenium+java破解極驗(yàn)滑動驗(yàn)證碼的示例代碼

    本篇文章主要介紹了selenium+java破解極驗(yàn)滑動驗(yàn)證碼的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Map按單個或多個Value排序當(dāng)Value相同時(shí)按Key排序

    Map按單個或多個Value排序當(dāng)Value相同時(shí)按Key排序

    Map可以先按照value進(jìn)行排序,然后按照key進(jìn)行排序。 或者先按照key進(jìn)行排序,然后按照value進(jìn)行排序,這樣操作都行,這篇文章主要介紹了Map按單個或多個Value排序,當(dāng)Value相同時(shí)按Key排序,需要的朋友可以參考下
    2023-02-02
  • Java 從互聯(lián)網(wǎng)上爬郵箱代碼示例

    Java 從互聯(lián)網(wǎng)上爬郵箱代碼示例

    這篇文章介紹了Java 從互聯(lián)網(wǎng)上爬郵箱的有關(guān)內(nèi)容,主要是一個代碼示例,小編覺得挺不錯的,這里給大家分享下,需要的朋友可以了解。
    2017-10-10
  • java注釋轉(zhuǎn)json插件開發(fā)實(shí)戰(zhàn)詳解

    java注釋轉(zhuǎn)json插件開發(fā)實(shí)戰(zhàn)詳解

    這篇文章主要為大家介紹了java注釋轉(zhuǎn)json插件開發(fā)實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • spring AOP定義AfterThrowing增加處理實(shí)例分析

    spring AOP定義AfterThrowing增加處理實(shí)例分析

    這篇文章主要介紹了spring AOP定義AfterThrowing增加處理,結(jié)合實(shí)例形式分析了spring面向切面AOP定義AfterThrowing相關(guān)實(shí)現(xiàn)步驟與操作技巧,需要的朋友可以參考下
    2020-01-01
  • 永久解決 Intellij idea 報(bào)錯:Error :java 不支持發(fā)行版本5的問題

    永久解決 Intellij idea 報(bào)錯:Error :java 不支持發(fā)行版本5的問題

    這篇文章主要介紹了永久解決 Intellij idea 報(bào)錯:Error :java 不支持發(fā)行版本5的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • java解析xml常用的幾種方式總結(jié)

    java解析xml常用的幾種方式總結(jié)

    這篇文章主要介紹了java解析xml常用的幾種方式總結(jié),有需要的朋友可以參考一下
    2013-11-11
  • 關(guān)于Java for循環(huán)的正確用法介紹

    關(guān)于Java for循環(huán)的正確用法介紹

    Java里的循環(huán)結(jié)構(gòu)我們可以通過while、do-while、for、foreach等方式實(shí)現(xiàn)循環(huán),這篇文章會把這幾種循環(huán)方式都給大家講解到,但本文主要介紹for循環(huán)的使用,感興趣的同學(xué)可以參考閱讀
    2023-05-05
  • RocketMQ源碼本地搭建調(diào)試方法

    RocketMQ源碼本地搭建調(diào)試方法

    這篇文章主要介紹了RocketMQ源碼本地搭建調(diào)試,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01

最新評論