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

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

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

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

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

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

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

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

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

MemberInner memberInner = new MemberInner();

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

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

OuterTest.this.test

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

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

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

在外部類外部創(chuàng)建內(nèi)部類對(duì)象:需要先創(chuàng)建外部類對(duì)象,再通過外部類創(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)部類需要注意:若外部類中有多個(gè)內(nèi)部類,這種方法會(huì)new出多個(gè)外部類對(duì)象,各個(gè)類對(duì)象都是獨(dú)立的,因此外部類的成員變量并不會(huì)在內(nèi)部類中共享。

如下代碼中,由于new出了兩個(gè)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)部類不需要外部類對(duì)象產(chǎn)生就能使用,不能訪問外部類的成員域,但能訪問靜態(tài)域。

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

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

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

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

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

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)部類的前提條件:必須繼承一個(gè)父類或?qū)崿F(xiàn)一個(gè)接口。 有以下一些特點(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java Property類使用詳解

    Java Property類使用詳解

    這篇文章主要介紹了Java Property類使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 解決遇到Cannot resolve ch.qos.logback:logback-classic:1.2.3錯(cuò)誤的問題

    解決遇到Cannot resolve ch.qos.logback:logback-classic:

    當(dāng)使用Maven配置項(xiàng)目依賴時(shí),可能會(huì)遇到無法解析特定版本的錯(cuò)誤,例如,logback-classic版本1.2.3可能無法在配置的倉庫中找到,解決方法包括檢查倉庫是否包含所需版本,或更新到其他可用版本,可通過Maven官網(wǎng)搜索并找到適用的版本,替換依賴配置中的版本信息
    2024-09-09
  • Java基礎(chǔ)之Unsafe內(nèi)存操作不安全類詳解

    Java基礎(chǔ)之Unsafe內(nèi)存操作不安全類詳解

    Java是面向?qū)ο笳Z言,在使用Java編程時(shí),大多數(shù)情況下都不會(huì)直接操作內(nèi)存,而且Java也不提倡直接操作內(nèi)存,但是Java中到底有沒有可以直接操作內(nèi)存的工具類呢?有!Java中提供Unsafe類可以用來來直接操作內(nèi)存,文中詳細(xì)介紹了Unsafe內(nèi)存操作不安全類,需要的朋友可以參考下
    2021-06-06
  • Java 內(nèi)存安全問題的注意事項(xiàng)

    Java 內(nèi)存安全問題的注意事項(xiàng)

    內(nèi)存安全問題是每個(gè)程序員開發(fā)時(shí)都需要面對(duì)的問題,本文介紹了JVM管理內(nèi)存的原理以及內(nèi)存安全問題需要注意的地方,有此需求的朋友可以參考下本文
    2021-06-06
  • Java中Json解析的方法分析

    Java中Json解析的方法分析

    這篇文章主要介紹了Java中Json解析的方法,結(jié)合實(shí)例形式分析了java針對(duì)json格式數(shù)據(jù)的解析實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • MyEclipse安裝JS代碼提示的教程(Spket插件)

    MyEclipse安裝JS代碼提示的教程(Spket插件)

    本篇文章主要介紹了MyEclipse安裝JS代碼提示的教程(Spket插件),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • Java矩陣連乘問題(動(dòng)態(tài)規(guī)劃)算法實(shí)例分析

    Java矩陣連乘問題(動(dòng)態(tài)規(guī)劃)算法實(shí)例分析

    這篇文章主要介紹了Java矩陣連乘問題(動(dòng)態(tài)規(guī)劃)算法,結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)矩陣連乘的算法原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-11-11
  • Maven 搭建SpringMVC+Hibernate項(xiàng)目詳解

    Maven 搭建SpringMVC+Hibernate項(xiàng)目詳解

    本文主要介紹Maven 搭建SpringMVC+Hibernate的知識(shí),這里整理了詳細(xì)的資料,并附示例代碼,有興趣的小伙伴可以參考下
    2016-09-09
  • java生成圖片驗(yàn)證碼返回base64圖片信息方式

    java生成圖片驗(yàn)證碼返回base64圖片信息方式

    這篇文章主要介紹了java生成圖片驗(yàn)證碼返回base64圖片信息方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • ReentrantLock重入鎖底層原理示例解析

    ReentrantLock重入鎖底層原理示例解析

    這篇文章主要為大家介紹了ReentrantLock重入鎖底層原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01

最新評(píng)論