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

淺談Java內(nèi)部類(lèi)——靜態(tài)內(nèi)部類(lèi)

 更新時(shí)間:2020年08月21日 10:23:45   作者:弗蘭克的貓  
這篇文章主要介紹了Java靜態(tài)內(nèi)部類(lèi)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java內(nèi)部類(lèi)的相關(guān)知識(shí),感興趣的朋友可以了解下

  今天來(lái)說(shuō)說(shuō)Java中的最后一種內(nèi)部類(lèi)——靜態(tài)內(nèi)部類(lèi)

  所謂的靜態(tài)內(nèi)部類(lèi),自然就是用static修飾的內(nèi)部類(lèi),那用static修飾過(guò)后的內(nèi)部類(lèi),跟一般的內(nèi)部類(lèi)相比有什么特別的地方呢?

  首先,它是靜態(tài)的,這就意味著它的創(chuàng)建不依賴(lài)于外部類(lèi),創(chuàng)建內(nèi)部類(lèi)的實(shí)例不需要像普通內(nèi)部類(lèi)一樣先創(chuàng)建外部類(lèi)實(shí)例才能創(chuàng)建。

  其次,有優(yōu)勢(shì)必然有劣勢(shì),它不能像普通內(nèi)部類(lèi)一樣無(wú)限制的訪問(wèn)外部類(lèi)的方法和成員變量,只能訪問(wèn)靜態(tài)成員變量和靜態(tài)方法。

  話(huà)不多說(shuō),先來(lái)看個(gè)栗子:

public class StaticInnerClass {

  //外部類(lèi)的非靜態(tài)成員
  private int numA = 1;

  //外部類(lèi)的靜態(tài)成員
  private static int numB = 2;

  //靜態(tài)內(nèi)部類(lèi)
  static class Inner {
    //內(nèi)部類(lèi)的非靜態(tài)成員
    private int numC = 3;
    //內(nèi)部類(lèi)的靜態(tài)成員
    private static int numD = 4;

    public void printInner(){
      System.out.println("printInner");
      System.out.println(numB);//訪問(wèn)外部類(lèi)的靜態(tài)成員
      System.out.println(numC);//訪問(wèn)內(nèi)部類(lèi)的非靜態(tài)成員
      System.out.println(numD);//訪問(wèn)內(nèi)部類(lèi)的靜態(tài)成員
    }
  }

  //外部類(lèi)的普通成員方法
  public void printOuter(){
    System.out.println("printOuter");
  }

  public static void main(String[] args) {
    StaticInnerClass outer = new StaticInnerClass();
    outer.printOuter();
    Inner inner = new StaticInnerClass.Inner();
    inner.printInner();
    System.out.println(StaticInnerClass.numB);
    System.out.println(Inner.numD);
  }
}

  輸出如下:

printOuter
printInner
2
3
4
2
4

  看起來(lái),內(nèi)部類(lèi)跟外部類(lèi)的使用上是差不多的,更像是一個(gè)暫存在外部類(lèi)中的一個(gè)類(lèi),跟外部類(lèi)并沒(méi)有什么太多本質(zhì)上的聯(lián)系,但是創(chuàng)建的時(shí)候需要使用Outer.Inner的方式來(lái)定義,就像給類(lèi)加了一個(gè)命名空間一樣。

  再舉個(gè)栗子來(lái)看看靜態(tài)內(nèi)部類(lèi)和非靜態(tài)內(nèi)部類(lèi)的區(qū)別:(知乎上看到的一段話(huà),覺(jué)得比喻比較形象)

如果把類(lèi)比喻成雞蛋,內(nèi)部類(lèi)為蛋,,外部類(lèi)是蛋殼。那么靜態(tài)類(lèi)相當(dāng)于熟雞蛋,就算蛋殼破碎(外部類(lèi)沒(méi)有實(shí)例化),蛋黃依然完好(內(nèi)部類(lèi)可以實(shí)例化);而非靜態(tài)類(lèi)相當(dāng)于生雞蛋,蛋殼破碎(無(wú)實(shí)例化),蛋黃也會(huì)跟著xx(不能實(shí)例化)。

  至于原因?其實(shí)就是因?yàn)榉庆o態(tài)內(nèi)部類(lèi)中保存有外部類(lèi)的指針,所以可以無(wú)限制訪問(wèn)外部類(lèi)的所有屬性,而靜態(tài)內(nèi)部類(lèi)則沒(méi)有,所以靜態(tài)內(nèi)部類(lèi)無(wú)法訪問(wèn)外部類(lèi)的非靜態(tài)成員和方法,僅僅是借用一下它的殼而已。

  再來(lái)看一個(gè)栗子:

public class Caculate {

  //定義一個(gè)pair類(lèi)來(lái)將兩個(gè)數(shù)捆綁
  static class Pair{
    private int first;
    private int second;

    public Pair(int first, int second) {
      this.first = first;
      this.second = second;
    }

    public int getFirst() {
      return first;
    }

    public int getSecond() {
      return second;
    }
  }

  //獲取一個(gè)int數(shù)組中的最大和最小值
  public static Pair getMaxMin(int[] values){
    int max = Integer.MIN_VALUE;
    int min = Integer.MAX_VALUE;
    for (int i:values){
      if (min > i) min = i;
      if (max < i) max = i;
    }
    return new Pair(min,max);
  }

  public static void main(String[] args){
    int[] list = {1,3,5,2,77,23,25};
    Caculate.Pair pair = Caculate.getMaxMin(list);
    System.out.println(pair.getFirst());
    System.out.println(pair.getSecond());
    System.out.println(pair.first);
    System.out.println(pair.second);
  }
}

  這里getMaxMin里需要一次返回兩個(gè)值,所以用了一個(gè)Pair類(lèi)來(lái)將兩個(gè)數(shù)捆綁到一起,而因?yàn)檫@個(gè)類(lèi)只在Caculate類(lèi)中使用,而且兩者并沒(méi)有依賴(lài)關(guān)系,所以這里使用靜態(tài)內(nèi)部類(lèi)是最合適的。

  靜態(tài)內(nèi)部類(lèi)還有很多適用的場(chǎng)景,這就需要大家在今后的使用中慢慢體會(huì)了。

  至此,本篇講解完畢,歡迎大家繼續(xù)關(guān)注。

以上就是淺談Java內(nèi)部類(lèi)——靜態(tài)內(nèi)部類(lèi)的詳細(xì)內(nèi)容,更多關(guān)于Java 靜態(tài)內(nèi)部類(lèi)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java concurrency之CountDownLatch原理和示例_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java concurrency之CountDownLatch原理和示例_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    CountDownLatch是一個(gè)同步輔助類(lèi),在完成一組正在其他線(xiàn)程中執(zhí)行的操作之前,它允許一個(gè)或多個(gè)線(xiàn)程一直等待。 下面通過(guò)本文給大家分享Java concurrency之CountDownLatch原理和示例,需要的的朋友參考下吧
    2017-06-06
  • 靜態(tài)方法中調(diào)用Spring注入過(guò)程解析

    靜態(tài)方法中調(diào)用Spring注入過(guò)程解析

    這篇文章主要介紹了靜態(tài)方法中調(diào)用Spring注入過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • mybatisPlus自動(dòng)填充更新時(shí)間的示例代碼

    mybatisPlus自動(dòng)填充更新時(shí)間的示例代碼

    本文主要介紹了mybatisPlus自動(dòng)填充更新時(shí)間,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java稀疏數(shù)組詳細(xì)圖文教程

    Java稀疏數(shù)組詳細(xì)圖文教程

    當(dāng)一個(gè)數(shù)組中的大部分元素為相同的值,可使用稀疏數(shù)組來(lái)保存該數(shù)組,可以將稀疏數(shù)組看做是普通數(shù)組的壓縮,這篇文章主要給大家介紹了關(guān)于Java稀疏數(shù)組的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • idea類(lèi)名顯示多行的設(shè)置方式

    idea類(lèi)名顯示多行的設(shè)置方式

    在IntelliJ IDEA中,類(lèi)名的顯示方式可以通過(guò)設(shè)置來(lái)調(diào)整,若想設(shè)置為單行顯示,需在設(shè)置中找到相關(guān)選項(xiàng)并勾選“√”,若需多行顯示,則取消勾選即可,此操作有助于優(yōu)化代碼視圖,提升開(kāi)發(fā)效率
    2024-09-09
  • SpringDataJpa創(chuàng)建聯(lián)合索引的實(shí)現(xiàn)

    SpringDataJpa創(chuàng)建聯(lián)合索引的實(shí)現(xiàn)

    這篇文章主要介紹了SpringDataJpa創(chuàng)建聯(lián)合索引的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java中Class類(lèi)的作用與深入理解

    Java中Class類(lèi)的作用與深入理解

    這篇文章主要介紹了Java中Class類(lèi)的作用與深入理解的相關(guān)資料,希望通過(guò)本文能幫助到大家讓大家理解這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • SpringMVC 方法四種類(lèi)型返回值總結(jié)(你用過(guò)幾種)

    SpringMVC 方法四種類(lèi)型返回值總結(jié)(你用過(guò)幾種)

    這篇文章主要介紹了SpringMVC 方法四種類(lèi)型返回值總結(jié)(你用過(guò)幾種),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-05-05
  • 并發(fā)編程ConcurrentLinkedQueue示例詳解

    并發(fā)編程ConcurrentLinkedQueue示例詳解

    這篇文章主要為大家介紹了并發(fā)編程ConcurrentLinkedQueue使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Java 基礎(chǔ)語(yǔ)法讓你弄懂類(lèi)和對(duì)象

    Java 基礎(chǔ)語(yǔ)法讓你弄懂類(lèi)和對(duì)象

    C 語(yǔ)言是面向過(guò)程的,而 Java 是面向?qū)ο笫俏覀兂B?tīng)到的一句話(huà),這章將帶你揭曉Java 基礎(chǔ)語(yǔ)法中類(lèi)與對(duì)象到底是什么,需要的朋友請(qǐng)參考下文
    2021-08-08

最新評(píng)論

镇雄县| 水富县| 云南省| 新巴尔虎右旗| 石渠县| 贞丰县| 临猗县| 拉孜县| 班戈县| 光泽县| 上林县| 都匀市| 辽阳市| 黑河市| 荔浦县| 威海市| 江门市| 简阳市| 崇明县| 肇东市| 梅河口市| 齐齐哈尔市| 特克斯县| 灌阳县| 津市市| 新安县| 黄骅市| 昆明市| 桦川县| 孟村| 碌曲县| 铜川市| 丰都县| 沂水县| 布尔津县| 甘泉县| 沧州市| 连云港市| 中超| 扶余县| 龙游县|