亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

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

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

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

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

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

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

public class StaticInnerClass { //外部類的非靜態(tài)成員 private int numA = 1; //外部類的靜態(tài)成員 private static int numB = 2; //靜態(tài)內(nèi)部類 static class Inner { //內(nèi)部類的非靜態(tài)成員 private int numC = 3; //內(nèi)部類的靜態(tài)成員 private static int numD = 4; public void printInner(){ System.out.println('printInner'); System.out.println(numB);//訪問(wèn)外部類的靜態(tài)成員 System.out.println(numC);//訪問(wèn)內(nèi)部類的非靜態(tài)成員 System.out.println(numD);//訪問(wèn)內(nèi)部類的靜態(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

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

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

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

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

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

public class Caculate { //定義一個(gè)pair類來(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)將兩個(gè)數(shù)捆綁到一起,而因?yàn)檫@個(gè)類只在Caculate類中使用,而且兩者并沒(méi)有依賴關(guān)系,所以這里使用靜態(tài)內(nèi)部類是最合適的。

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

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

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

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 日韩人成免费网站大片 | 一区二区三区免费高清视频 | 免费大片在线观看www | 日韩在线视频网 | 成年女人毛片免费视频 | 男女乱淫真视频免费一级毛片 | 久久国产精品无码网站 | 亚洲成a人片在线观 | 在线高清免费爱做网 | 七色永久性tv网站免费看 | 欧美一级毛片免费大片 | 国产成人精品日本亚洲专区6 | 亚洲香蕉毛片久久网站老妇人 | 亚洲精品国产综合99久久一区 | 性色aⅴ闺蜜一区二区三区 性色a按摩videos | 日本黄色一级毛片 | 综合亚洲欧美 | 成人一级片在线观看 | www.一级毛片 | 草草在线播放 | 青草免费免费观看视频在线 | 国产高清在线视频伊甸园 | 91精品国产高清久久久久久 | 亚洲色图日本 | 男女乱淫真视频免费一级毛片 | 国产精品美女网站在线看 | 亚洲欧美一区二区三区不卡 | 国产成人yy免费视频 | 色播亚洲精品网站 亚洲第一 | 久久久精品一区二区三区 | 久久久久激情免费观看 | 亚洲123| 快猫在线观看入口免费网站满十八 | 日韩精品一区二区三区国语自制 | 国产精品福利在线观看免费不卡 | 制服丝袜综合第八页 | 99久久免费国产精精品 | 黄色一级美女 | 国产精品福利网站 | 亚洲xxxxxx| 91天堂97年嫩模在线观看 |