一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

服務器之家 - 編程語言 - Java教程 - 新手初學Java的內部類

新手初學Java的內部類

2021-09-29 11:33貪玩的阿柒 Java教程

這篇文章主要介紹了java內部類原理與用法,結合實例形式分析了Java內部類的概念、原理、分類及相關使用技巧,需要的朋友可以參考下,希望能給你帶來幫助

Java的內部類

概念:

  • 內部類就是在一個類的內部定義一個類,比如,A類中定義一個B類,那么B類相對于A類來說就是稱為內部類,而A類相對于B類來說就是外部類。
  • 成員內部類
  • 靜態內部類
  • 局部內部類
  • 匿名內部類

特點:

  • 內部類編譯之后可以生成獨立的字節碼文件。
  • 內部類可以直接訪問外部類的私有成員,而不破壞封裝。
  • 內部類可為外部類提供必要的內部功能組件。
  • 外部類要訪問內部類的成員,必須要建立內部類的對象

成員內部類

在內的內部定義,與實例變量、實例方法同級別的類。

成員內部類中不能包含靜態成員,但可以包含靜態常量。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.cnblogs;
//這個類用于實現
public class Application {
    public static void main(String[] args) {
        Outer outer = new Outer();//實例化  外部類
        Outer.Inner inner = outer.new Inner();//實例化  內部類
        //一步到位實例化內部類
        //Inner inner = new Outer().new Inner();
        //外部類的屬性
        System.out.println(outer.age);//21
        //外部類方法
        outer.out1();//這是外部類的方法
        //內部類屬性
        System.out.println(inner.in);//內部類屬性
        //內部類方法
        inner.inner();//這是內部類方法
        //內部類獲取外部類的私有屬性
        inner.getName();//獲取到了外部類的私有屬性:柒
        //內部類獲取外部類的私有方法
        inner.getMethod();//這是外部類的私有方法
    }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package com.cnblogs;
/*
 * 本類用于測試內部類可以直接訪問外部類的私有成員
 */
public class Outer {
    //外部類的私有屬性
    private String name = "柒";
    //外部類的屬性
    public int age = 21;
    //外部類的私有方法
    private void out() {
        System.out.println("這是外部類的私有方法");
    }
    //外部類的方法
    public void out1() {
        System.out.println("這是外部類的方法");
    }
     class Inner{
        //內部類屬性
        public String in = "內部類屬性";
        //內部類方法
        public void inner() {
            System.out.println("這是內部類方法");
        }
        //獲取外部類的私有屬性
        public void getName() {
            System.out.println("獲取到了外部類的私有屬性:" + name);
        }
        //獲取外部類的私有方法
        public void getMethod() {
            out();
        }
    }
}

注意:當外部類、內部類存在重名屬性時,會優先訪問內部類屬性

?
1
2
3
4
5
6
7
8
9
10
11
package com.cnblogs;
import com.cnblogs.Outer.Inner;
/*
 * 本類用于實現
 */
public class Application {
    public static void main(String[] args) {
        Inner inner = new Outer().new Inner();
        inner.show();
    }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.cnblogs;
/*
 * 本類用于測試內部類和外部類的同名屬性
 */
public class Outer {
    //外部類屬性
    private String name = "張三";
    class Inner{
        //內部類屬性
        private  String name = "柒";
        //內部類方法,用于打印
        public void show() {
            //這里打印出的是內部類的屬性:柒
            System.out.println(name);
            //這是打印外部類的屬性:張三
            System.out.println(Outer.this.name);
        }
    }
}

靜態內部類

不依賴外部類對象,可直接創建或通過類名訪問,可聲明靜態成員

?
1
2
3
4
5
6
7
8
9
10
11
12
13
package com.cnblogs;
import com.cnblogs.Outer2.Inner;
/*
 * 本類用于實現
 */
public class Application {
    public static void main(String[] args) {
        //直接創建內部類對象
        Inner inner = new Outer2.Inner();
        //調用方法
        inner.show();
    }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.cnblogs;
/*
 * 本類用于測速靜態內部類
 */
//外部類
public class Outer2 {
    private String name = "柒";
    private int age = 21;
    //靜態內部類 用法和外部類一樣
    static class Inner{
        private String in = "靜態內部類屬性";
        private int inner = 99;
        //靜態成員
        private static int inners = 999;
        //調用方法
        public void show() {
            //調用外部類屬性,先創建外部類對象
            Outer2 outer = new Outer2();
            //再調用外部類屬性
            System.out.println(outer.name);//柒
            System.out.println(outer.age);//21
            //調用靜態內部類屬性
            System.out.println(in);//靜態內部類屬性
            System.out.println(inner);//99
            //調用靜態內部類的靜態成員
            System.out.println(inners);//999
            System.out.println(Inner.inners);//999
        }
    }
}

局部內部類

定義在外部類方法中,作用范圍和創建對象范圍僅限于當前方法。

局部內部類訪問外部類當前方法中的局部變量時,因無法保障變量的生命周期與自身相同,變量必須修飾為final。

限制類的使用范圍。

?
1
2
3
4
5
6
7
8
package com.cnblogs;
//這個類用于實現
public class Application {
    public static void main(String[] args) {
        Outer3 outer = new Outer3();
        outer.show();
    }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.cnblogs;
/*
 * 本類用于測試局部內部類
 */
//外部類
public class Outer3 {
    private String name = "柒";
    private int age = 21;
    public void show() {
        //定義局部變量
        String in = "蘇州";
        //局部內部類:不能加任何訪問修飾符
        class Inner{
            //局部內部類的屬性
            private String phone = "10086";
            //局部內部類方法
            public void show2() {
                //訪問外部類屬性
                System.out.println(name);//Outer3.this.name
                System.out.println(age);
                //訪問內部類屬性
                System.out.println(phone);//this.phone
                //訪問局部變量:jdk1.7要求 變量必須是常量final,jdk1.8自動添加final
                System.out.println(in);
            }
        }
        //創建內部類對象
        Inner inner = new Inner();
        inner.show2();
    }
}

匿名內部類

沒有類名的局部內部類(一切特征都與內部類相同)。

必須繼承一個父類或者實現一個接口。

定義類、實現類、創建對象的語法合并,只能創建一個該類的對象。

  • 優點:減少代碼量
  • 缺點:可讀性較差
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package com.cnblogs;
/*
 * 本類用于實現局部內部類
 */
public class TestUsb {
    public static void main(String[] args) {
        //創建接口類型的變量
//      Usb usb = new Mouse();
//      usb.service();
        //局部內部類
//      class Fan implements Usb{
//
//          @Override
//          public void service() {
//              System.out.println("鏈接成功,可以使用!!!!");
//             
//          }
//         
//      }
        //使用局部內部類創建對象
//      Usb usb = new Fan();
//      usb.service();
        //使用匿名內部類優化(相當于創建了一個局部內部類)
        Usb usb = new Usb() {
            @Override
            public void service() {
                System.out.println("鏈接成功,可以使用!!!!");
            }
        };
        usb.service();
    }
}
?
1
2
3
4
5
6
package com.cnblogs;
//接口
public interface Usb {
    //服務
    void service();
}
?
1
2
3
4
5
6
7
8
package com.cnblogs;
//實現接口
public class Mouse implements Usb{
    @Override
    public void service() {
        System.out.println("鏈接成功,可以使用!!!!!");
    }
}

總結

本篇文章就到這里了,希望能給你帶來幫助,也希望你能夠多多關注服務器之家的更多內容!

原文鏈接:https://www.cnblogs.com/fangweicheng666/p/14970784.html

延伸 · 閱讀

精彩推薦
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7472021-02-04
主站蜘蛛池模板: caoporn人人| 亚洲午夜精品久久久久久抢 | 91亚洲精品第一综合不卡播放 | 特黄特a级特别特级特毛片 特黄a级三级三级野战 | 四虎成人www国产精品 | 无码人妻精品一区二区蜜桃在线看 | 欧美一级专区免费大片俄罗斯 | 国产东北3p真实在线456视频 | 吉泽明步高清无码中文 | 国产成人咱精品视频免费网站 | 国产精品久久久久aaaa | 欧美久久综合网 | 日本又大又硬又粗的视频 | 无遮无挡免费视频 | 毛片资源站 | 亚洲七七久久综合桃花 | 美女福利视频一区二区 | 福利国产片 | 国产理论片在线观看 | 国产日韩在线 | 欧美精品一国产成人性影视 | 国产 日韩欧美 | 青青青视频蜜桃一区二区 | 被强上后我成瘾了小说 | 午夜理论电影在线观看亚洲 | 91对白在线 | 九二淫黄大片看片 | 免费一区视频 | 国产精品久久99 | 日韩欧美国产成人 | 波多野给衣一区二区三区 | 国产精品欧美亚洲韩国日本 | 久久爽狠狠添AV激情五月 | 美女被扒开屁股进去网 | 放荡警察巨r麻麻出轨小说 范冰冰特黄xx大片 饭冈加奈子在线播放观看 法国老妇性xx在线播放 | 青草青草伊人精品视频 | 久久这里只有精品无码3D | 日韩精品视频福利资源站 | 美女gif趴跪式抽搐动态图 | 男女小视频在线观看 | 国产精品亚洲片在线va |