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

初探Java內(nèi)部類的使用

 更新時間:2022年09月23日 08:34:55   作者:lovekey  
Java內(nèi)部類一般可以分為以下三種:成員內(nèi)部類、靜態(tài)內(nèi)部類和匿名內(nèi)部類。這篇文章主要帶大家初探一下Java內(nèi)部類的使用,感興趣的可以了解一下

之前對內(nèi)部類的概念不太清晰,在此對內(nèi)部類與外部類之間的關(guān)系以及它們之間的調(diào)用方式進(jìn)行一個總結(jié)。

Java內(nèi)部類一般可以分為以下三種:

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

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

內(nèi)部類的創(chuàng)建:成員內(nèi)部類的創(chuàng)建需要依賴于外部類對象,沒有創(chuàng)建外部類實例之前無法創(chuàng)建成員內(nèi)部類對象

若在main函數(shù)中直接創(chuàng)建成員內(nèi)部類則會報錯:

MemberInner memberInner = new MemberInner();

私有屬性訪問:成員內(nèi)部類可直接訪問外部類非靜態(tài)私有屬性,外部類訪問內(nèi)部類私有屬性則需要通過內(nèi)部類的對象來訪問

在memberInnerTest()方法中,可以直接訪問外部類中的私有test字段,若內(nèi)部類中有與外部類同名字段,調(diào)用外部類需要使用如下方法:

OuterTest.this.test

創(chuàng)建內(nèi)部類:

在外部類內(nèi)部創(chuàng)建內(nèi)部類對象:使用new關(guān)鍵字創(chuàng)建內(nèi)部類對象

private void createMemberInner(){
    MemberInner memberInner = new MemberInner();
    memberInner.memberInnerTest();
}

在外部類外部創(chuàng)建內(nèi)部類對象:需要先創(chuàng)建外部類對象,再通過外部類創(chuàng)建內(nèi)部類

OuterTest outerTest = new OuterTest();
MemberInner memberInner = outerTest.new MemberInner();

若不需要使用外部類,可以使用如下方式創(chuàng)建內(nèi)部類

MemberInner memberInner = new OuterTest().new MemberInner();

使用該方法創(chuàng)建內(nèi)部類需要注意:若外部類中有多個內(nèi)部類,這種方法會new出多個外部類對象,各個類對象都是獨(dú)立的,因此外部類的成員變量并不會在內(nèi)部類中共享。

如下代碼中,由于new出了兩個OuterVar類,所以InnerOne與InnerTwo類輸出的成員變量var均為0。若想InnerOne與InnerTwo類共享成員變量var,則需用如下方式創(chuàng)建:

  OuterVar outerVar = new OuterVar();
  InnerOne innerOne = outerVar.new InnerOne();
  InnerTwo innerTwo = outerVar.new InnerTwo();
public class OuterVar {
private int var = 0;
 
class InnerOne{
  private void innerOnePrint(){
      System.out.println("innerOnePrint:"+var);
      var+=1;
  }
}
 
class InnerTwo{
  private void innerTwoPrint(){
      System.out.println("innerTwoPrint:"+var);
  }
}
 
public static void main(String[] args) {
  InnerOne innerOne = new OuterVar().new InnerOne();
  InnerTwo innerTwo = new OuterVar().new InnerTwo();
 
  innerOne.innerOnePrint();
  innerTwo.innerTwoPrint();
}
}
/* 結(jié)果
innerOnePrint:0
innerTwoPrint:0
*/
/*1、成員內(nèi)部類
  2、靜態(tài)內(nèi)部類
  3、匿名內(nèi)部類
*/
public class OuterTest {
    /*
    1、成員內(nèi)部類
     */
    private String test = "OuterTest";
 
    private void createMemberInner(){
        MemberInner memberInner = new MemberInner();
        memberInner.memberInnerTest();
    }
 
    class MemberInner{
        private String test = "MemberInnerTest";
 
        public void memberInnerTest(){
            System.out.println("MemberInner");
            System.out.println(test);
            System.out.println(OuterTest.this.test);
 
        }
    }
 
    public static void main(String[] args) {
        // 成員內(nèi)部類
        OuterTest outerTest = new OuterTest();
        MemberInner memberInner = outerTest.new MemberInner();
//        MemberInner memberInner = new OuterTest().new MemberInner();
        
        memberInner.memberInnerTest();
    }
}
 
 
/* 結(jié)果
   MemberInner
   MemberInnerTest
   OuterTest */

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

靜態(tài)內(nèi)部類定義在外部類的內(nèi)部,使用static關(guān)鍵字修飾,靜態(tài)內(nèi)部類不需要外部類對象產(chǎn)生就能使用,不能訪問外部類的成員域,但能訪問靜態(tài)域。

私有屬性訪問:靜態(tài)內(nèi)部類不可直接訪問外部類的非靜態(tài)屬性

創(chuàng)建內(nèi)部類:

在外部類內(nèi)部創(chuàng)建內(nèi)部類對象:使用new關(guān)鍵字創(chuàng)建內(nèi)部類對象

private void createStaticInner(){
    StaticInner staticInner = new StaticInner();
    staticInner.staticInnerTest();
}

在外部類外部創(chuàng)建內(nèi)部類對象:可以不創(chuàng)建外部類對象,直接創(chuàng)建內(nèi)部類對象

StaticInner staticInner = new StaticInner();
public class OuterTest {
    /*
      2、靜態(tài)內(nèi)部類
     */
    private String test = "OuterTest";
 
    private void createStaticInner(){
        StaticInner staticInner = new StaticInner();
        staticInner.staticInnerTest();
    }
 
 
    static class StaticInner{
        private String test = "StaticInnerTest";
 
        public void staticInnerTest(){
            System.out.println("StaticInner");
            System.out.println(test);
        }
    }
 
    public static void main(String[] args) {
        // 靜態(tài)內(nèi)部類
        StaticInner staticInner = new StaticInner();
        staticInner.staticInnerTest();
    }
}
 
/* 結(jié)果
   StaticInner
   StaticInnerTest */

三、匿名內(nèi)部類

使用匿名內(nèi)部類的前提條件:必須繼承一個父類或?qū)崿F(xiàn)一個接口。 有以下一些特點(diǎn):

由于匿名內(nèi)部類是沒有類名,所以匿名內(nèi)部類不能有構(gòu)造方法

匿名內(nèi)部類不能定義任何靜態(tài)成員、方法和類

//匿名內(nèi)部類
interface Father{
    public abstract void talk();
 
    public abstract void eat();
}
public class Test {
    public static void main(String[] args) {
        //匿名內(nèi)部類
        Father father = new Father() {
            @Override
            public void talk() {
                System.out.println("I'm Father");
            }
 
            @Override
            public void eat() {
                System.out.println("I'm eating");
            }
        };
        father.talk();
        father.eat();
    }
}
 
/* 結(jié)果
   I'm Father
   I'm eating */

到此這篇關(guān)于初探Java內(nèi)部類的使用的文章就介紹到這了,更多相關(guān)Java內(nèi)部類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Java構(gòu)建樹結(jié)構(gòu)的公共方法

    詳解Java構(gòu)建樹結(jié)構(gòu)的公共方法

    本文主要介紹了詳解Java構(gòu)建樹結(jié)構(gòu)的公共方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • SpringBoot項目使用mybatis-plus代碼生成的實例詳解

    SpringBoot項目使用mybatis-plus代碼生成的實例詳解

    mybatis-plus是mybatis的增強(qiáng),不對mybatis做任何改變,涵蓋了代碼生成,自定義ID生成器,快速實現(xiàn)CRUD,自動分頁,邏輯刪除等功能。本文就來講講SpringBoot項目如何使用mybatis-plus實現(xiàn)代碼生成,需要的可以了解一下
    2022-10-10
  • SpringBoot深入探究@Conditional條件裝配的使用

    SpringBoot深入探究@Conditional條件裝配的使用

    這篇文章主要為大家介紹了SpringBoot底層注解@Conditional的使用分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • javabean?中使用@Transient屬性處理臨時字段

    javabean?中使用@Transient屬性處理臨時字段

    @Transient表示該屬性并非一個到數(shù)據(jù)庫表的字段的映射,ORM框架將忽略該屬性,本文給大家介紹javabean?中臨時字段的處理:@Transient,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • 基于JavaMail實現(xiàn)簡單郵件發(fā)送

    基于JavaMail實現(xiàn)簡單郵件發(fā)送

    這篇文章主要為大家詳細(xì)介紹了基于JavaMail實現(xiàn)簡單郵件發(fā)送,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 詳解springboot中mybatis注解形式

    詳解springboot中mybatis注解形式

    在本文中小編給大家分享了關(guān)于springboot中mybatis注解形式的介紹,有興趣的可以跟著學(xué)習(xí)下。
    2018-10-10
  • springboot3如何接入nacos

    springboot3如何接入nacos

    這篇文章主要介紹了springboot3接入nacos的配置方法,經(jīng)過很長時間的折騰終于搞定,下面把步驟操作過程分享給大家,需要的朋友可以參考下
    2024-03-03
  • Java?8中讀取文件內(nèi)容?Files.lines()方法使用示例

    Java?8中讀取文件內(nèi)容?Files.lines()方法使用示例

    這篇文章主要介紹了Java?8中讀取文件內(nèi)容Files.lines()方法如何使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Java?Runtime的使用詳解

    Java?Runtime的使用詳解

    這篇文章主要介紹了Java?Runtime的使用詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • UrlDecoder和UrlEncoder使用詳解_動力節(jié)點(diǎn)Java學(xué)院整理

    UrlDecoder和UrlEncoder使用詳解_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了UrlDecoder和UrlEncoder使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評論

酒泉市| 新竹市| 株洲县| 天台县| 五家渠市| 屏东市| 赫章县| 资源县| 阳泉市| 安康市| 泰宁县| 泊头市| 南澳县| 定陶县| 蓬溪县| 马龙县| 武邑县| 浙江省| 洪洞县| 甘肃省| 阿荣旗| 宜宾市| 乐东| 永定县| 尉氏县| 汝州市| 蕲春县| 彭泽县| 祁东县| 永平县| 涞源县| 镇雄县| 阿鲁科尔沁旗| 武穴市| 日照市| 诏安县| 贵州省| 恩施市| 和政县| 军事| 安庆市|