[2021.02.20][Java語(yǔ)言學(xué)習(xí)]0.1.嵌套類

1. 嵌套類

Java一個(gè)文件中除了有最頂層的類揩慕,在類內(nèi)部還可以定義新的類。之所以這樣設(shè)計(jì)有三點(diǎn)原因

  • 能夠符合邏輯的編排那些只在一個(gè)地方用到的類
  • 能夠提高封裝性,因?yàn)榍短最惪梢詫?duì)外隱藏但對(duì)內(nèi)訪問(wèn)外部類的成員
  • 可以讓代碼更好閱讀和維護(hù)。峭沦。。逃糟。(這一點(diǎn)我覺(jué)得有待商榷)

嵌套類有多種形式吼鱼,第一種是內(nèi)部類,又分為靜態(tài)內(nèi)部類绰咽,和非靜態(tài)內(nèi)部類菇肃;第二種是本地類,出現(xiàn)在{}中取募,一般是出現(xiàn)在函數(shù)琐谤、循環(huán)等;第三種是匿名類玩敏,用語(yǔ)句來(lái)表示斗忌。本地類和匿名類實(shí)際上是兩種特殊的內(nèi)部非靜態(tài)類。

2. 內(nèi)部類

內(nèi)部類需要了解聲明旺聚,實(shí)例化方式织阳,與外部類成員之間的關(guān)系,和序列化的一些知識(shí)點(diǎn)砰粹。

內(nèi)部類的訪問(wèn)控制修飾符與類中的成員修飾符一致唧躲,有四種,具體的訪問(wèn)控制范圍也是一致的。

//static inner class
class OuterClass{
    modifier static class InnerClass{}
}
//non-static inner class
class OuterClass{
    modifier class InnerClass{}
}

內(nèi)部類的數(shù)量有限制嗎惊窖?語(yǔ)言本身應(yīng)該是沒(méi)有限制的,但是在編譯過(guò)程中厘贼,會(huì)通過(guò)類決定class的文件名界酒,此時(shí)文件名長(zhǎng)度限制會(huì)對(duì)內(nèi)部類的層數(shù)有一定的限制,但對(duì)內(nèi)部類的數(shù)量會(huì)不會(huì)有限制還沒(méi)仔細(xì)看嘴秸。

2.1 內(nèi)部靜態(tài)類

內(nèi)部靜態(tài)類所有的功能都和外部類相同毁欣,只是為了編排需求放在內(nèi)部。聲明形式如上岳掐,實(shí)例化方式如下:

OuterClass.InnerClass innerInstance = new OuterClass.InnerClass();

內(nèi)部靜態(tài)類只能直接訪問(wèn)外部靜態(tài)類的靜態(tài)變量(所有的類都能凭疮,只要滿足訪問(wèn)控制權(quán)限),但不能訪問(wèn)實(shí)例變量串述。

2.2 內(nèi)部非靜態(tài)類

內(nèi)部非靜態(tài)類是與實(shí)例綁定在一起的执解,只能通過(guò)實(shí)例進(jìn)行實(shí)例化,聲明形式如上纲酗,實(shí)例化方式如下:

OuterClass.InnerClass innerInstance = outerInstance.new InnerClass();

既然是與實(shí)例綁定在一起的衰腌,那么也是可以訪問(wèn)外部類的實(shí)例成員的。

(反射這一部分還沒(méi)有仔細(xì)看)不能對(duì)內(nèi)部非靜態(tài)類進(jìn)行序列化觅赊,因?yàn)椴煌木幾g器對(duì)內(nèi)部非靜態(tài)類的序列化方式不一樣右蕊,所以反序列化的時(shí)候,對(duì)于不同編譯器編譯的非靜態(tài)類可能會(huì)出現(xiàn)問(wèn)題吮螺?

既然內(nèi)部非靜態(tài)類持有對(duì)外部類的引用饶囚,那么內(nèi)部非靜態(tài)類一定不會(huì)在外部類之后被gc了。

3 局域類

局域類為{}內(nèi)的類鸠补,例如:

public void method(){
    class LocalClass{}
}

局域類不可以在外部進(jìn)行實(shí)例萝风,可以在方法內(nèi)部進(jìn)行實(shí)例化。

局域類可以訪問(wèn)局域變量以及實(shí)例變量紫岩,但是如果局域類在靜態(tài)方法中就不可以訪問(wèn)實(shí)例變量闹丐,可以理解為這不是局域類的限制,而是靜態(tài)方法的限制被因。

同時(shí)卿拴,在訪問(wèn)局域變量或者參數(shù)變量的時(shí)候,變量需要是final修飾的梨与,或者方法體當(dāng)中沒(méi)有對(duì)進(jìn)行修改的堕花。這是因?yàn)榫钟蝾愒L問(wèn)局部變量的時(shí)候是通過(guò)變量捕捉(找了半天,原來(lái)變量捕捉就是復(fù)制一份變量)訪問(wèn)變量粥鞋,所以如果變量本身修改了缘挽,但是沒(méi)有修改局域類中的變量值,就不統(tǒng)一了。這是對(duì)局域變量和參數(shù)變量的限制壕曼,對(duì)實(shí)例變量沒(méi)有這樣的限制苏研。

局域類不可以聲明為靜態(tài)類,這主要是因?yàn)榫钟蝾惪梢栽L問(wèn)實(shí)例變量腮郊,需要持有實(shí)例的引用(未經(jīng)考證)摹蘑。而且局域類中不能定義靜態(tài)成員,除了常量轧飞。大概原因是(沒(méi)有仔細(xì)考究)java運(yùn)行的時(shí)候需要對(duì)靜態(tài)成員進(jìn)行加載衅鹿,但是局域類根據(jù)實(shí)例綁定在一起,所以不對(duì)局域類實(shí)例化过咬,就無(wú)法確定靜態(tài)成員啥的大渤。

4 匿名類

匿名類可以用來(lái)定義接口或者繼承類。匿名類的使用方式為實(shí)例化一個(gè)對(duì)象并賦值給一個(gè)顯示引用或者作為參數(shù):

interface SayHello{}
class AnonClass{}

SayHello sayHello = new SayHello(){}
AnonClass anonClass = new AnonClass(){}

object.method(new interface/class(){})

匿名類對(duì)于外部類的成員訪問(wèn)與局域類相同掸绞。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末泵三,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子衔掸,更是在濱河造成了極大的恐慌切黔,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件具篇,死亡現(xiàn)場(chǎng)離奇詭異纬霞,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)驱显,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門诗芜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人埃疫,你說(shuō)我怎么就攤上這事伏恐。” “怎么了栓霜?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵翠桦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我胳蛮,道長(zhǎng)销凑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任仅炊,我火速辦了婚禮斗幼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抚垄。我一直安慰自己蜕窿,他們只是感情好谋逻,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著桐经,像睡著了一般毁兆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阴挣,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天气堕,我揣著相機(jī)與錄音,去河邊找鬼屯吊。 笑死送巡,一個(gè)胖子當(dāng)著我的面吹牛摹菠,可吹牛的內(nèi)容都是我干的盒卸。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼次氨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蔽介!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起煮寡,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤虹蓄,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后幸撕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體薇组,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年坐儿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了律胀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡貌矿,死狀恐怖炭菌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情逛漫,我是刑警寧澤黑低,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站酌毡,受9級(jí)特大地震影響克握,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜枷踏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一玛荞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧呕寝,春花似錦勋眯、人聲如沸婴梧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)塞蹭。三九已至,卻和暖如春讶坯,著一層夾襖步出監(jiān)牢的瞬間番电,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工辆琅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留漱办,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓婉烟,卻偏偏與公主長(zhǎng)得像娩井,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子似袁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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