午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:15日期:2022-08-26 13:39:44

今天來說說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); }}

輸出如下:

printOuterprintInner23424

看起來,內部類跟外部類的使用上是差不多的,更像是一個暫存在外部類中的一個類,跟外部類并沒有什么太多本質上的聯(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)內部類的資料請關注好吧啦網(wǎng)其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 黄色片aaa | 懂色av蜜臀av粉嫩av | 国产自产在线 | 操女人的软件 | 国产黄色网址在线观看 | 17c在线观看视频 | 国产欧美日韩在线观看 | xxxxxxxx黄色片 | 日本在线观看中文字幕 | 朝桐光一区二区三区 | 欧美人与性动交a欧美精品 天天干天天天天 | 国产女人18毛片18精品 | 亚洲一区天堂 | 色偷偷超碰 | 久久99精品久久久久久三级 | 国产精品一区av | 日韩在线观看一区二区 | 久久婷婷激情 | 91真精| 日本亚洲一区二区三区 | 欧美黄页 | 婷婷在线观看视频 | 午夜激情网址 | 欧美色激情 | 成人免费一级视频 | 成人久久视频 | 欧美精品一二三四区 | 国产午夜精品一区二区三区嫩草 | 毛片在线网址 | 亚洲成人aaa| 亚洲成人av一区二区三区 | 亚洲综合成人在线 | av免费网址 | 在线不卡日本 | 久久超碰精品 | 99热在线观看精品 | 亚洲vs天堂 | 视频国产精品 | 香蕉视频网站在线观看 | 九九在线| 在线观看第一页 |