激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 詳解Java內部類與對象的打印概念和流程

詳解Java內部類與對象的打印概念和流程

2022-02-23 13:22Luka.lh Java教程

在 Java 中,可以將一個類定義在另一個類里面或者一個方法里面,這樣的類稱為內部類。廣泛意義上的內部類一般來說包括這四種:成員內部類、局部內部類、匿名內部類和靜態內部類

 

一、內部類的概念

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

public class OutClass {//外部類
    class InnerClass{//內部類
 
    }
}

注意事項:

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

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

2、內部類和外部類共用同一個java源文件,但是經過編譯之后,內部類會形成單獨的字節碼文件。

 

二、內部類的分類

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

根據內部類定義的位置不同,可以分為:

成員內部類:普通內部類和靜態內部類。

局部內部類和匿名內部類。

 

三、成員內部類

 

1、普通內部類

未被static修飾的成員內部類。

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

/*
100
150
300
400
*/

注意事項:

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

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

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

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

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

詳解Java內部類與對象的打印概念和流程

6、外部類中,不能直接訪問內部類中的成員,如果要訪問必須先要創建內部類的對象。

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

從堆和棧的角度來看內部類和外部類:

詳解Java內部類與對象的打印概念和流程

 

2、靜態內部類

被static修飾的成員內部類稱為靜態內部類。

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

注意事項:

1、在內部類中只能訪問外部類中的靜態成員。

詳解Java內部類與對象的打印概念和流程

2、創建靜態內部類對象時,不需要先創建外部類對象。

3、成員內部類,經過編譯之后會生成自己獨立的字節碼文件,例如下:

詳解Java內部類與對象的打印概念和流程

 

四、局部內部類

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

public class OutClass {//外部類
     int a=10;
 
    public void method(){              //外部類方法
        int b=10;
        class InnerClass{              //局部內部類,只能在該方法體內部使用
            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、局部內部類只能在所定義的方法體內部使用。

2、局部內部類不能被public、static等限定符修飾。

3、同樣編譯之后局部內部類會生成自己的字節碼文件。

命名格式:外部類名$x內部類名.class, 其中x是一個整數。

詳解Java內部類與對象的打印概念和流程

 

五、對象的打印

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);
    }
}

打印結果: 并不是對象本身。

詳解Java內部類與對象的打印概念和流程

如果想要打印對象本身,那么需要重寫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);
    }
}

/*
執行結果:
[luka,man,21]
*/

到此這篇關于詳解Java內部類與對象的打印概念和流程的文章就介紹到這了,更多相關Java 內部類內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/m0_58715346/article/details/120498819

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 中文字幕在线观看成人 | 黄色片网站免费在线观看 | 国模论坛 | 亚洲精品自在在线观看 | 免费黄色a | a免费视频| 久久金品 | 精品亚洲综合 | 久久精品亚洲一区二区 | 亚洲99| 三人弄娇妻高潮3p视频 | 成人福利在线视频 | av国语| 免费看日产一区二区三区 | 欧美性视频一区二区 | 欧美一级成人一区二区三区 | 久久精品中文字幕一区二区 | 日日摸夜夜骑 | 免费大香伊蕉在人线国产 | 成人免费在线视频播放 | 欧美激情天堂 | 一级在线免费观看视频 | 国产精品免费小视频 | 久久新地址 | 国产精品色在线网站 | 91免费高清视频 | 亚洲一区二区三区日本久久九 | 亚洲午夜不卡 | 黄色7777| 超碰97人| www.99tv | 国产精品久久久在线观看 | 免费观看国产精品视频 | h网站在线观看 | 欧美成人精品一区二区男人小说 | 大学生一级毛片在线视频 | 成人免费看毛片 | 国产91九色 | 成人aaaa免费全部观看 | 日本a∨精品中文字幕在线 国产精品片www48888 | 国产精品99精品 |