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

java內(nèi)部類原理與用法詳解

 更新時(shí)間:2019年05月20日 11:05:30   作者:XINGKONG_04  
這篇文章主要介紹了java內(nèi)部類原理與用法,結(jié)合實(shí)例形式分析了Java內(nèi)部類的概念、原理、分類及相關(guān)使用技巧,需要的朋友可以參考下

本文實(shí)例講述了java內(nèi)部類原理與用法。分享給大家供大家參考,具體如下:

概念

內(nèi)部類:可以包含在另外一個(gè)類中的類

外部類:包含內(nèi)部類的類

每個(gè)內(nèi)部類都會(huì)被編譯為一個(gè)獨(dú)立的類,生成一個(gè)獨(dú)立的字節(jié)碼文件。

內(nèi)部類可以方便地訪問(wèn)外部類的私有變量,內(nèi)部類也可以聲明為private從而實(shí)現(xiàn)對(duì)外完全隱藏。

分類

java中的四種內(nèi)部類(根據(jù)定義的位置和方式劃分)

  • -靜態(tài)內(nèi)部類
  • -成員內(nèi)部類
  • -方法內(nèi)部類
  • -匿名內(nèi)部類

分類介紹

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

特征:在類的內(nèi)部中存在另一個(gè)類,且該類被static修飾

使用范圍:在外部類內(nèi),可以直接使用內(nèi)部類,在外部類范圍以外使用外部類名.靜態(tài)內(nèi)部類名的方式使用內(nèi)部類

public class StaticOuter {
    private static int shared = 100;
    public static class StaticInner{
        public void staticInnerMethod() {
            System.out.println("Static Inner Method" + shared);
        }
    }
    StaticInner si1 = new StaticInner();
    public void test() {
        StaticInner si = new StaticInner();
        si.staticInnerMethod();
    }
    public static void main(String[] args) {
        StaticOuter so = new StaticOuter();
        so.test();
    //在外部類范圍內(nèi)
        StaticInner si1 = new StaticInner();
        si1.staticInnerMethod();
    //合法
    StaticOuter.StaticInner si2 = new StaticOuter.StaticInner();
        si2.staticInnerMethod();
    }
}
//在外部類范圍外
class Test{
    StaticOuter.StaticInner si2 = new StaticOuter.StaticInner();
}

訪問(wèn)范圍

  • 靜態(tài)內(nèi)部類只能訪問(wèn)外部類中的static變量和方法。
  • 靜態(tài)內(nèi)部類也可以訪問(wèn)外部類中的private變量。
  • 靜態(tài)內(nèi)部類中可以定義靜態(tài)變量和靜態(tài)方法。

-成員內(nèi)部類

語(yǔ)法:成員內(nèi)部類作為外部類的一個(gè)成員存在

使用方法:

如何新建一個(gè)內(nèi)部類的實(shí)例:不能直接使用外部類.內(nèi)部類的方式,每個(gè)成員內(nèi)部類對(duì)象對(duì)應(yīng)一個(gè)外部類實(shí)例,因此需要先創(chuàng)建一個(gè)外部類實(shí)例,然后才能生成內(nèi)部類的實(shí)例(如下面代碼)

訪問(wèn)范圍:

成員內(nèi)部類可以訪問(wèn)外部類中的靜態(tài)變量和方法,也可以訪問(wèn)實(shí)例變量和方法。但是書寫格式有兩種:

(1)直接訪問(wèn);

(2)外部類.this.xxx,主要針對(duì)外部類和內(nèi)部類的出現(xiàn)變量重名或者方法重名的情況。

成員內(nèi)部類也可以訪問(wèn)外部類的私有變量

成員內(nèi)部類中不可以定義靜態(tài)變量和靜態(tài)方法(final變量例外,它等同于常量),在后面的方法內(nèi)部類和匿名內(nèi)部類中也是不能存在靜態(tài)的變量和方法的,這是因?yàn)殪o態(tài)變量和靜態(tài)方法作為類型的屬性和方法,一般是獨(dú)立使用的,而成員內(nèi)部類和一個(gè)對(duì)一個(gè)的外部類實(shí)例關(guān)聯(lián),一般不會(huì)獨(dú)立使用,所以這樣的使用意義不大。(這算是一種規(guī)定吧)。

public class OriginalClass {
    private static int t1 = 100;
    private int t2 = 200;
    class OriginalInner{
        public void test() {
      /*
           * 不合法的表示,在成員內(nèi)部類中不可以定義靜態(tài)的變量和方法
          public static int inner = 100;
          public static void print() {
          }
          */
          //合法的final變量
          public static final int inner1 = 300;
            System.out.println("OriginalInner:"+ t1);//直接訪問(wèn)外部類靜態(tài)變量
            System.out.println("OriginalInner:"+ t2);//直接訪問(wèn)外部類成員變量
            action();//直接訪問(wèn)外部類方法
            System.out.println("OriginalInner:"+ OriginalClass.this.t1);//
            System.out.println("OriginalInner:"+ OriginalClass.this.t2);
            OriginalClass.this.action();
        }
    }
    public void action() {
        System.out.println("originalinner action");
    }
    public static void main(String[] args) {
    //new一個(gè)內(nèi)部類
        OriginalClass oc = new OriginalClass();
        OriginalInner oi = oc.new OriginalInner();
        oi.test();
    }
}

-方法內(nèi)部類

語(yǔ)法:存在于方法體內(nèi)部的類

使用范圍:方法內(nèi)部類只能在定義的方法內(nèi)被使用

訪問(wèn)范圍:

如果包含內(nèi)部類的方法是實(shí)例方法,那么可以訪問(wèn)外部類的靜態(tài)變量和方法,也可以訪問(wèn)實(shí)例變量和方法;

如果包含內(nèi)部類的方法是靜態(tài)方法,那么只能訪問(wèn)外部類的靜態(tài)變量和方法。

方法內(nèi)部類還可以直接訪問(wèn)方法的參數(shù)和方法中的局部變量,但是這些變量必須聲明為final。為什么需要聲明為final呢?這是因?yàn)榉椒▋?nèi)部類操作的并不是外部的變量,而是它自己的實(shí)例變量,只是這些變量的值和外部一樣,對(duì)這些變量賦值,并不會(huì)改變外部的值,為避免混淆,所以干脆強(qiáng)制規(guī)定必須聲明為final。

我們知道被final修飾的基本類型變量的值是不能被修改的,被final修飾的數(shù)組或者引用類型變量的引用是不能修改的,即只能指向一個(gè)對(duì)象或者是數(shù)組,但是我們可以修改對(duì)象中的成員變量值或者是數(shù)組中元素的值。

其實(shí)使用final來(lái)修飾參數(shù)以及局部變量的目的還是保證方法內(nèi)部類外面的元素不會(huì)在方法內(nèi)部類中被修改,相當(dāng)于限制一個(gè)作用域的功能,保證方法內(nèi)部類內(nèi)部的的修改不會(huì)影響方法內(nèi)部類外面的同名變量值。

public class FunctionOuter {
    private static int s= 100;
    private int s1 = 20;
    public void print(final int param) {
        final int in = 300;
        class FunctionInner{
            public void innertest() {
                System.out.println("FunctionInner:s="+s);
                System.out.println("FunctionInner:s1="+s1);
                System.out.println("FunctionInner:in"+ in);
                test();
            }
        }
        FunctionInner fi = new FunctionInner();
        fi.innertest();
        System.out.println("print:in"+in);
    }
    public void test() {
        System.out.println("FunctionOuter:"+s);
    }
    public static void main(String[] args) {
        FunctionOuter fo = new FunctionOuter();
        fo.print(900);
    }
}

-匿名內(nèi)部類

語(yǔ)法:匿名內(nèi)部類沒(méi)有單獨(dú)的類定義,它在創(chuàng)建對(duì)象的同時(shí)定義類

new 父類(參數(shù)列表){
  //匿名內(nèi)部類實(shí)現(xiàn)部分
}

new 父接口(){
  //匿名內(nèi)部類實(shí)現(xiàn)部分
}

匿名內(nèi)部類只能使用一次,用來(lái)創(chuàng)建一個(gè)對(duì)象。沒(méi)有名字,沒(méi)有構(gòu)造方法,但是可以根據(jù)參數(shù)列表,調(diào)用對(duì)應(yīng)的父類構(gòu)造方法。

在匿名內(nèi)部類中可以定義實(shí)例變量和方法,以及初始化代碼塊,初始化代碼塊可以起到構(gòu)造方法的作用,只是構(gòu)造方法可以有多個(gè),但是初始化代碼塊只能有一塊,因?yàn)闆](méi)有構(gòu)造方法,它自己無(wú)法接受參數(shù),如果必須要參數(shù),則應(yīng)該是用其他內(nèi)部類。

匿名內(nèi)部類可以訪問(wèn)外部類的所有變量和方法,可以訪問(wèn)方法中的final參數(shù)和局部變量

更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 詳解Java并發(fā)包中線程池ThreadPoolExecutor

    詳解Java并發(fā)包中線程池ThreadPoolExecutor

    ThreadPoolExecutor是Java語(yǔ)言對(duì)于線程池的實(shí)現(xiàn)。線程池技術(shù)使線程在使用完畢后不回收而是重復(fù)利用。如果線程能夠復(fù)用,那么我們就可以使用固定數(shù)量的線程來(lái)解決并發(fā)問(wèn)題,這樣一來(lái)不僅節(jié)約了系統(tǒng)資源,而且也會(huì)減少線程上下文切換的開銷
    2021-06-06
  • 詳解HttpSecurity是如何組裝過(guò)濾器鏈的

    詳解HttpSecurity是如何組裝過(guò)濾器鏈的

    HttpSecurity 本質(zhì)上也是一個(gè) SecurityBuilder,我們平時(shí)在 HttpSecurity 配置的各種東西,本質(zhì)上其實(shí)就是一個(gè) xxxConfigure,這些 xxxConfigure 被 HttpSecurity 收集起來(lái),本文將給大家介紹HttpSecurity是如何組裝過(guò)濾器鏈的,需要的朋友可以參考下
    2024-06-06
  • 用C++實(shí)現(xiàn)求N!中末尾0的個(gè)數(shù)的方法詳解

    用C++實(shí)現(xiàn)求N!中末尾0的個(gè)數(shù)的方法詳解

    這篇文章主要介紹了用C++實(shí)現(xiàn)求N!中末尾0的個(gè)數(shù)的方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java設(shè)計(jì)模式探究之觀察者模式詳解

    Java設(shè)計(jì)模式探究之觀察者模式詳解

    這篇文章主要為大家詳細(xì)介紹了JAVA的觀察者模式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-08-08
  • springboot整合shiro的過(guò)程詳解

    springboot整合shiro的過(guò)程詳解

    Shiro 是一個(gè)強(qiáng)大的簡(jiǎn)單易用的 Java 安全框架,主要用來(lái)更便捷的 認(rèn)證,授權(quán),加密,會(huì)話管理,這篇文章給大家詳細(xì)介紹Shiro 工作原理及架構(gòu)圖,通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-10-10
  • SpringCloud 限流、熔斷、降級(jí)的區(qū)別及實(shí)現(xiàn)

    SpringCloud 限流、熔斷、降級(jí)的區(qū)別及實(shí)現(xiàn)

    本文主要介紹了SpringCloud 限流、熔斷、降級(jí)的區(qū)別及實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • 輕松掌握J(rèn)ava迭代器模式

    輕松掌握J(rèn)ava迭代器模式

    這篇文章主要幫助大家輕松掌握J(rèn)ava迭代器模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • hibernate增刪改查操作代碼

    hibernate增刪改查操作代碼

    這篇文章主要介紹了hibernate增刪改查操作代碼,需要的朋友可以參考下
    2017-09-09
  • 詳解用JWT對(duì)SpringCloud進(jìn)行認(rèn)證和鑒權(quán)

    詳解用JWT對(duì)SpringCloud進(jìn)行認(rèn)證和鑒權(quán)

    這篇文章主要介紹了詳解用JWT對(duì)SpringCloud進(jìn)行認(rèn)證和鑒權(quán),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 配置了jdk的環(huán)境idea卻提示找不到j(luò)dk解決辦法

    配置了jdk的環(huán)境idea卻提示找不到j(luò)dk解決辦法

    在使用Java編程語(yǔ)言進(jìn)行開發(fā)時(shí),IDEA是一個(gè)非常流行和強(qiáng)大的集成開發(fā)環(huán)境,這篇文章主要給大家介紹了關(guān)于配置了jdk的環(huán)境idea卻提示找不到j(luò)dk的解決辦法,需要的朋友可以參考下
    2023-12-12

最新評(píng)論

丰县| 电白县| 拉孜县| 灵璧县| 浮山县| 新安县| 鄂伦春自治旗| 施甸县| 东丽区| 舒城县| 甘德县| 咸宁市| 西盟| 瓦房店市| 南雄市| 翁源县| 顺义区| 洞头县| 岳普湖县| 尚志市| 徐汇区| 惠州市| 枣庄市| 饶平县| 桦南县| 隆林| 庆城县| 电白县| 东港市| 苍梧县| 洪泽县| 惠来县| 抚宁县| 祁东县| 法库县| 东方市| 庆城县| 万安县| 大邑县| 正宁县| 元谋县|