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

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

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

  今天來說說Java中的最后一種內部類——靜態(tài)內部類

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

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

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

  話不多說,先來看個栗子:

public class StaticInnerClass {

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

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

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

    public void printInner(){
      System.out.println("printInner");
      System.out.println(numB);//訪問外部類的靜態(tài)成員
      System.out.println(numC);//訪問內部類的非靜態(tài)成員
      System.out.println(numD);//訪問內部類的靜態(tà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

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

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

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

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

  再來看一個栗子:

public class Caculate {

  //定義一個pair類來將兩個數(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;
    }
  }

  //獲取一個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里需要一次返回兩個值,所以用了一個Pair類來將兩個數(shù)捆綁到一起,而因為這個類只在Caculate類中使用,而且兩者并沒有依賴關系,所以這里使用靜態(tài)內部類是最合適的。

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

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

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

相關文章

  • java中線程中斷的實現(xiàn)示例

    java中線程中斷的實現(xiàn)示例

    中斷只是一種協(xié)作協(xié)商機制,Java沒有給中斷增加任何語法,中斷的過程完全需要程序員自己實現(xiàn),本文就來介紹一下線程中斷的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • ibatis學習之搭建Java項目

    ibatis學習之搭建Java項目

    本文的主要內容是簡單介紹了ibatis和如何通過iBatis搭建JAVA項目,包含了一個相關實例,需要的朋友可以參考下。
    2017-09-09
  • hibernate關于session的關閉實例解析

    hibernate關于session的關閉實例解析

    這篇文章主要介紹了hibernate關于session的關閉實例解析,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Java從JDK源碼角度對Object進行實例分析

    Java從JDK源碼角度對Object進行實例分析

    這篇文章主要介紹了Java從JDK源碼角度對Object進行實例分析,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Java模擬實現(xiàn)斗地主的洗牌和發(fā)牌

    Java模擬實現(xiàn)斗地主的洗牌和發(fā)牌

    這篇文章主要為大家詳細介紹了Java模擬實現(xiàn)斗地主的洗牌和發(fā)牌,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • IDEA如何實現(xiàn)批量修改變量名

    IDEA如何實現(xiàn)批量修改變量名

    這篇文章主要介紹了IDEA如何實現(xiàn)批量修改變量名問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • springboot項目打包成jar包的圖文教程

    springboot項目打包成jar包的圖文教程

    有時候我們會用IDEA來開發(fā)一些小工具,需要打成可運行的JAR包,這篇文章主要給大家介紹了關于springboot項目打包成jar包的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • Java中優(yōu)先隊列PriorityQueue常用方法示例

    Java中優(yōu)先隊列PriorityQueue常用方法示例

    這篇文章主要介紹了Java中優(yōu)先隊列PriorityQueue常用方法示例,PriorityQueue是一種特殊的隊列,滿足隊列的“隊尾進、隊頭出”條件,但是每次插入或刪除元素后,都對隊列進行調整,使得隊列始終構成最小堆(或最大堆),需要的朋友可以參考下
    2023-09-09
  • 深入理解Java虛擬機之經典垃圾收集器

    深入理解Java虛擬機之經典垃圾收集器

    這篇文章主要介紹了深入理解Java虛擬機之經典垃圾收集器的相關知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • 獲取Spring的上下文環(huán)境ApplicationContext的最簡單方式

    獲取Spring的上下文環(huán)境ApplicationContext的最簡單方式

    這篇文章主要介紹了獲取Spring的上下文環(huán)境ApplicationContext的最簡單方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評論