java 靜態(tài)內(nèi)部類的分析

introduce
Java中的嵌套類(Nested Class)分為兩種:靜態(tài)內(nèi)部類(也叫靜態(tài)嵌套類务嫡,Static Nested Class)和內(nèi)部類(Inner Class)。內(nèi)部類我們介紹過很多了准谚,現(xiàn)在來看看靜態(tài)內(nèi)部類去扣。

什么是靜態(tài)內(nèi)部類呢?是內(nèi)部類唆铐,并且是靜態(tài)(static修飾)的即為靜態(tài)內(nèi)部類奔滑。只有在是靜態(tài)內(nèi)部類的情況下才能把static修復(fù)符放在類前,其他任何時(shí)候static都是不能修飾類的王浴。

靜態(tài)內(nèi)部類的形式很好理解,但是為什么需要靜態(tài)內(nèi)部類呢叼耙?那是因?yàn)殪o態(tài)內(nèi)部類有兩個(gè)優(yōu)點(diǎn):加強(qiáng)了類的封裝性和提高了代碼的可讀性筛婉,我們通過一段代碼來解釋這兩個(gè)優(yōu)點(diǎn)癞松,如下所示:

public class Person{  
     //姓名  
     private String name;  
     //家庭  
     private Home home;  
     //構(gòu)造函數(shù)設(shè)置屬性值  
     public Person(String _name){  
          name = _name;  
     }  
     /* home、name的getter/setter方法省略 */  
 
     public static class Home{  
          //家庭地址  
          private String address;  
          //家庭電話  
          private String tel;  
 
          public Home(String _address,String _tel){  
            address = _address;  
            tel = _tel;  
          }  
          /* address硕勿、tel的getter/setter方法省略 */  
     }  
} 

優(yōu)點(diǎn)一:封裝性的提高

其中Person類中定義了一個(gè)靜態(tài)內(nèi)部類Home枫甲,它表示的意思是“人的家庭信息”,由于Home類封裝了家庭信息粱栖,不用在Person類中再定義homeAddre脏毯、homeTel等屬性,這就使封裝性提高了食店。

優(yōu)點(diǎn)二: 可讀性提高

同時(shí)我們僅僅通過代碼就可以分析出Person和Home之間的強(qiáng)關(guān)聯(lián)關(guān)系乎折,也就是說語義增強(qiáng)了顾患,可讀性提高了自娩。


以在使用時(shí)就會(huì)非常清楚它要表達(dá)的含義:

public static void main(String[] args) {  
     //定義張三這個(gè)人  
     Person p = new Person("張三");  
     //設(shè)置張三的家庭信息  
     p.setHome(new Person.Home("上海","021"));  
} 

定義張三這個(gè)人,然后通過Person.Home類設(shè)置張三的家庭信息捶箱,這是不是就和我們真實(shí)世界的情形相同了?先登記人的主要信息丁屎,然后登記人員的分類信息〕看ǎ可能你又要問了,這和我們一般定義的類有什么區(qū)別呢共虑?又有什么吸引人的地方呢?如下所示:

提高封裝性妈拌。從代碼位置上來講,靜態(tài)內(nèi)部類放置在外部類內(nèi)尘分,其代碼層意義就是:靜態(tài)內(nèi)部類是外部類的子行為或子屬性猜惋,兩者直接保持著一定的關(guān)系培愁,比如在我們的例子中,看到Home類就知道它是Person的Home信息定续。

提高代碼的可讀性。相關(guān)聯(lián)的代碼放在一起私股,可讀性當(dāng)然提高了。

形似內(nèi)部庇茫,神似外部。靜態(tài)內(nèi)部類雖然存在于外部類內(nèi)旦签,而且編譯后的類文件名也包含外部類(格式是:外部類+$+內(nèi)部類),但是它可以脫離外部類存在宁炫,也就是說我們?nèi)匀豢梢酝ㄟ^new Home()聲明一個(gè)Home對象,只是需要導(dǎo)入“Person.Home”而已羔巢。

解釋了這么多,讀者可能會(huì)覺得外部類和靜態(tài)內(nèi)部類之間是組合關(guān)系(Composition)了竿秆,這是錯(cuò)誤的,外部類和靜態(tài)內(nèi)部類之間有強(qiáng)關(guān)聯(lián)關(guān)系幽钢,這僅僅表現(xiàn)在“字面”上,而深層次的抽象意義則依賴于類的設(shè)計(jì)匪燕。

那靜態(tài)內(nèi)部類與普通內(nèi)部類有什么區(qū)別呢蕾羊?問得好,區(qū)別如下:

(1)靜態(tài)內(nèi)部類不持有外部類的引用

在普通內(nèi)部類中书闸,我們可以直接訪問外部類的屬性利凑、方法,即使是private類型也可以訪問截碴,這是因?yàn)閮?nèi)部類持有一個(gè)外部類的引用日丹,可以自由訪問蚯嫌。而靜態(tài)內(nèi)部類,則只可以訪問外部類的靜態(tài)方法和靜態(tài)屬性(如果是private權(quán)限也能訪問择示,這是由其代碼位置所決定的),其他則不能訪問汪诉。

(2)靜態(tài)內(nèi)部類不依賴外部類

普通內(nèi)部類與外部類之間是相互依賴的關(guān)系谈秫,內(nèi)部類實(shí)例不能脫離外部類實(shí)例,也就是說它們會(huì)同生同死该编,一起聲明硕淑,一起被垃圾回收器回收。而靜態(tài)內(nèi)部類是可以獨(dú)立存在的于樟,即使外部類消亡了拇囊,靜態(tài)內(nèi)部類還是可以存在的。

(3)普通內(nèi)部類不能聲明static的方法和變量
普通內(nèi)部類不能聲明static的方法和變量奢米,注意這里說的是變量,常量(也就是final static修飾的屬性)還是可以的鬓长,而靜態(tài)內(nèi)部類形似外部類,沒有任何限制英上。

這篇文章清晰的分析了啤覆,靜態(tài)內(nèi)部類的兩大優(yōu)點(diǎn)(提高封裝性和可讀性),我們可以在碼代碼的過程中相恃,注意使用靜態(tài)內(nèi)部類笨觅,會(huì)給自己的代碼提高不少!原文地址

Every day is a chance to improve yourself杀糯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末固翰,一起剝皮案震驚了整個(gè)濱河市羹呵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌担巩,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拳话,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)呀非,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門岸裙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人降允,你說我怎么就攤上這事〈鄙校” “怎么了翅楼?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵理茎,是天一觀的道長褂微。 經(jīng)常有香客問我,道長宠蚂,這世上最難降的妖魔是什么求厕? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任扰楼,我火速辦了婚禮,結(jié)果婚禮上项栏,老公的妹妹穿的比我還像新娘蹬竖。我一直安慰自己,他們只是感情好列另,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布旦装。 她就那樣靜靜地躺著,像睡著了一般店乐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上描滔,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天含长,我揣著相機(jī)與錄音伏穆,去河邊找鬼。 笑死枕扫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的诗鸭。 我是一名探鬼主播参滴,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼砾赔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了暴心?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤悯衬,失蹤者是張志新(化名)和其女友劉穎檀夹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體亏狰,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡暇唾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瘸味。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片够挂。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡孽糖,死狀恐怖枯冈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情办悟,我是刑警寧澤尘奏,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站病蛉,受9級特大地震影響炫加,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜铺然,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一俗孝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧魄健,春花似錦赋铝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽其垄。三九已至,卻和暖如春卤橄,著一層夾襖步出監(jiān)牢的瞬間绿满,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工窟扑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留喇颁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓嚎货,卻偏偏與公主長得像橘霎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子殖属,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容