Java基礎(chǔ)day10筆記:異常(finally)|異常處理語句的幾種格式|覆蓋時(shí)的異常特點(diǎn)

????01-面向?qū)ο?異常-finally)

? ? ? ? 還是以之前那個(gè)程序?yàn)槔了獭N覀兓叵肫饋泶俾觯郧霸谶M(jìn)行異常處理的時(shí)候,除了try代芜、catch苔埋,是不是還有一部分叫finally呀?

? ? ? ? 我們把finally也加進(jìn)去蜒犯。?

? ? ? ? finally中存放的是一定會(huì)被執(zhí)行的代碼组橄。

? ? ? ? 測(cè)試了兩次,一次是傳錯(cuò)誤的值罚随,發(fā)生異常的情況玉工;一次是傳正確的值,沒有異常的情況淘菩,發(fā)現(xiàn)finally都執(zhí)行到啦:

? ? ? ? ?那么遵班,有一個(gè)問題屠升,程序發(fā)生異常了,這兩句話都會(huì)執(zhí)行到:

????????那這兩句話有什么區(qū)別嗎狭郑?

? ? ? ? 我們來做一個(gè)小測(cè)試腹暖,在程序發(fā)生異常的時(shí)候,我們希望程序在這里結(jié)束翰萨,不要往下執(zhí)行了脏答, 加一句return語句:

? ? ? ? 運(yùn)行結(jié)果是這樣的:

? ? ? ? 我們發(fā)現(xiàn),"over"沒有執(zhí)行亩鬼,而“finally”依然執(zhí)行了殖告。return代表著結(jié)束這個(gè)主函數(shù),而“over”是主函數(shù)中的語句雳锋,所以沒有被執(zhí)行黄绩。

? ? ? ? 既然finally始終都會(huì)被執(zhí)行到,那么它存在的意義是什么呢玷过?

? ? ? ? 我們來用一個(gè)實(shí)際需求來說明它存在的作用爽丹。

? ? ? ? 我們寫程序,去連接數(shù)據(jù)庫辛蚊。數(shù)據(jù)庫里存儲(chǔ)了n多的數(shù)據(jù)粤蝎,我們從主機(jī)發(fā)一個(gè)請(qǐng)求到服務(wù)器里面去,首先要做的是不是連接呀嚼隘?

? ? ? ? 連接好之后,使用完服務(wù)器里的數(shù)據(jù)袒餐,我們要及時(shí)斷開飞蛹。因?yàn)榉?wù)器的連接數(shù)是有限的,就像CPU的處理能力是有限的一樣灸眼,如果我們始終和它連接著不斷開卧檐,會(huì)耗費(fèi)服務(wù)器的資源,占用服務(wù)器的連接焰宣,害其他想使用服務(wù)器的寶寶不能及時(shí)連接上霉囚。

? ? ? ? 注意哦,不論是否成功取到服務(wù)器中的數(shù)據(jù)匕积,我們結(jié)束后都要及時(shí)斷開哦盈罐!

? ? ? ? 對(duì)數(shù)據(jù)庫的使用需要經(jīng)歷這三個(gè)過程:

? ? ? ? 但是在第二步的時(shí)候,可能會(huì)出現(xiàn)一些異常闪唆,比如要?jiǎng)h除的數(shù)據(jù)不存在啦盅粪、要添加的數(shù)據(jù)不符合規(guī)則啦這種奇奇怪怪的情況。出現(xiàn)異常之后悄蕾,程序會(huì)結(jié)束掉票顾,但是作為一個(gè)文明有愛的寶寶,我們關(guān)閉數(shù)據(jù)庫的操作也要正常進(jìn)行呢!

? ? ? ? 這個(gè)時(shí)候就需要用到finally啦奠骄,我們這樣來寫(只寫了大意豆同,省略了一些內(nèi)容):

? ? ? ? 因此,finally灰常重要含鳞!

? ? ? ? 在寫到關(guān)于異常的處理影锈,如果沒有做finally的處理,沒有進(jìn)行資源的關(guān)閉民晒,這個(gè)程序就是有問題的精居,面試官會(huì)因此認(rèn)為你缺乏編程經(jīng)驗(yàn)。后果好嚴(yán)重呀潜必。

? ? ? ? finally代碼塊:定義一定執(zhí)行的代碼靴姿。

? ? ? ? 通常用于關(guān)閉資源。

? ? ? ? 資源一定要關(guān)閉掉磁滚,否則它的運(yùn)行壓力會(huì)非常大佛吓。

? ? ? ? 再說說這個(gè)異常,我們可以把它拋出去嗎垂攘?

? ? ? ? 我們來思考一下:你在調(diào)用我的功能往數(shù)據(jù)庫里面存數(shù)據(jù)维雇,(也就是我在操作數(shù)據(jù)庫,你只要調(diào)用我就行啦)晒他。你把數(shù)據(jù)給我吱型,我把結(jié)果給你就OK。這個(gè)時(shí)候數(shù)據(jù)庫發(fā)生問題了陨仅,我把問題拋給你津滞,你能解決嗎?

? ? ? ? 你是調(diào)用我的人灼伤,你把數(shù)據(jù)給我了触徐,我來操作數(shù)據(jù)庫,現(xiàn)在數(shù)據(jù)庫發(fā)生問題了狐赡,我把數(shù)據(jù)庫異常拋給了你撞鹉,這不合適呀。因?yàn)槟阒皇悄脭?shù)據(jù)的人颖侄,你根本不懂怎么操作數(shù)據(jù)庫鸟雏,我卻把我的問題丟給了你,我很壞壞览祖!所以這樣不好的崔慧!

? ? ? ? 這樣做的問題:

? ? ? ? 1,我打破了我這個(gè)程序的封裝性穴墅,暴露出了它的內(nèi)容到別人那里去惶室。

? ? ? ? 2温自,我把我的問題丟給了你,而你不會(huì)解決皇钞。

? ? ? ? 所以悼泌,還是負(fù)責(zé)操作數(shù)據(jù)庫的我,來對(duì)數(shù)據(jù)庫異常進(jìn)行處理夹界,這才是最好的安排馆里。

? ? ? ? 這樣來寫:

? ? ? ? 先處理數(shù)據(jù)庫異常,將數(shù)據(jù)庫異常處理完之后可柿,再向外拋一個(gè)異常鸠踪,并把這個(gè)異常標(biāo)識(shí)到方法上:

? ? ? ? 而你在調(diào)用我的方法的時(shí)候,數(shù)據(jù)庫異常你處理不了复斥,但是這個(gè)異常就要交由你來處理啦营密。(數(shù)據(jù)庫異常你處理不了是正常的,但是添加的數(shù)據(jù)不符合規(guī)則等等目锭,這種問題评汰,就是你可以處理的啦)

? ? ? ? 所以開發(fā)是要分層次的,模塊化的開發(fā)痢虹,我就負(fù)責(zé)處理數(shù)據(jù)庫的功能被去,你就負(fù)責(zé)數(shù)據(jù)的部分(數(shù)據(jù)的獲取、返回之類的)奖唯,將數(shù)據(jù)獲取到惨缆,校驗(yàn)就是你的事,最終你是不是把數(shù)據(jù)要給我丰捷,我把它放到數(shù)據(jù)庫里面去坯墨,或者說,你需要什么數(shù)據(jù)跟我說瓢阴,我去數(shù)據(jù)庫里面幫你找畅蹂。

? ? ? ? 舉個(gè)例子幫助理解哦:

? ? ? ? 倉庫管理員和銷售員健无。銷售需要一批貨荣恐,賣出去,難道需要銷售親自去倉庫里面取貨嗎累贤?如果這樣做叠穆,過程就會(huì)很繁瑣。所以將銷售和倉庫分開臼膏,銷售來面向客戶硼被,需要什么貨,讓倉庫管理員去取渗磅,倉庫管理員是面向倉庫的嚷硫。

? ? ? ? 現(xiàn)在检访,銷售需要10箱貨,叫倉庫管理員去取貨仔掸。倉庫管理員到倉庫之后發(fā)現(xiàn)脆贵,昨天下大雨,倉庫漏水了起暮,把貨全都淹了卖氨,貨不能用了。這個(gè)時(shí)候负懦,倉庫管理員需要跟銷售說“倉庫漏水了筒捺,怎么辦呀?”嗎纸厉?不需要的系吭。倉庫內(nèi)部的事情祝辣,由倉庫管理員來處理逮壁。漏水的問題需要倉庫管理員來處理,這不是銷售可以處理的事抱完,他只需要告訴銷售“沒有貨哦抛猫◇№铮”就可以啦。

? ? ? ? 就像上面這兩句話:我們先對(duì)倉庫的異常問題進(jìn)行處理闺金,然后將問題報(bào)出去逾滥。但是不需要將本層的問題報(bào)出去,只報(bào)一個(gè)對(duì)方可以識(shí)別的問題就可以了败匹。

? ? ? ? 這就叫做問題的封裝寨昙。有些問題我們需要內(nèi)部進(jìn)行處理,處理完之后掀亩,我們告訴對(duì)方處理的結(jié)果就好了舔哪。至于原因,愿意說就說槽棍,不愿意說就算啦捉蚤。

? ? ? ? 那這樣可以嗎:

? ? ? ? 倉庫管理員把倉庫修好了,但是沒有告訴銷售沒有貨炼七。銷售既沒有拿到貨缆巧,也不知道發(fā)生了什么,沒有收到任何消息豌拙。

? ? ? ? 這個(gè)問題是有關(guān)聯(lián)性的陕悬,倉庫管理員卻沒有將關(guān)聯(lián)性的信息提供出去。

????????所以不可以這樣的按傅,這兩句話的內(nèi)容都要做到哦捉超。

????02-面向?qū)ο?異常-處理語句其他格式)

? ? ? ? 異常處理語句的幾種格式:

? ? ? ? 使用的時(shí)候擇其一就好啦胧卤。

? ? ? ? 說一個(gè)小問題:

? ? ? ? 這樣編譯能通過嗎?

? ? ? ? 不能哦拼岳。因?yàn)樵诤瘮?shù)內(nèi)拋灌侣,函數(shù)上要標(biāo)識(shí)呢。

? ? ? ? 那這樣寫編譯可以通過嗎:

? ? ? ? 能裂问。因?yàn)閱栴}在內(nèi)部可以解決了侧啼,外部就不知道了。原則是:只要問題可以被解決堪簿,問題就可以不聲明痊乾。問題沒有被解決,就要聲明在函數(shù)上椭更。

? ? ? ? 什么叫問題可以解決了哪审?有catch就叫問題可以解決了~(catch真好~)

? ? ? ? 再來,拋一個(gè)e虑瀑,編譯能通過嗎湿滓?

? ? ? ? 不能。

? ? ? ? 因?yàn)樽プ×艘粋€(gè)問題舌狗,又拋了一個(gè)問題叽奥。

? ? ? ? 那這樣呢,能通過嗎痛侍?

? ? ? ? 能哦朝氓。因?yàn)樗赾atch中,只要被處理了就行主届。

? ? ? ? 接著再看赵哲,這樣可以編譯通過嗎:

? ? ? ? 問題被處理了嗎?沒有catch就沒有被處理君丁。沒處理的話枫夺,就要在函數(shù)上標(biāo)識(shí)異常。這里并沒有標(biāo)識(shí)出去绘闷,所以不能編譯通過橡庞。

? ? ? ? 那這里寫finally有什么用呢?

? ? ? ? 注意簸喂,在這個(gè)功能內(nèi)部燎潮,有可能會(huì)訪問到一些其他資源纠拔,但是這個(gè)資源產(chǎn)生一些問題臀叙,并不在這個(gè)資源中處理。但是岁疼,我還是要關(guān)資源。產(chǎn)生不產(chǎn)生問題不管它扳肛,資源都要關(guān)掉绪抛。產(chǎn)生問題呢,丟給調(diào)用者去處理咕娄,這個(gè)功能不管挚歧,但是資源要先關(guān)掉痴鳄,因?yàn)閷?duì)方獲取到這個(gè)問題之后芽唇,他有可能也不會(huì)關(guān)資源。所以基显,try和finally是可以在一起的,finally可以用于關(guān)閉資源(或者說一定會(huì)執(zhí)行的代碼)琅催。

? ? ? ? 如果在一個(gè)功能當(dāng)中,定義了一些必須要執(zhí)行的代碼虫给。那么就可以用try-finally的形式藤抡,將一定要執(zhí)行的代碼放在finally當(dāng)中。

? ? ? ? 記住一點(diǎn):catch是用于處理異常抹估。如果沒有catch就代表異常沒有被處理過杰捂,如果該異常是檢測(cè)時(shí)異常,那么必須聲明棋蚌。

????03-面向?qū)ο?異常-覆蓋時(shí)的異常特點(diǎn))

? ? ? ? 注意哦嫁佳,異常聲明的時(shí)候是不是聲明在函數(shù)上呀?而函數(shù)有一個(gè)特性就叫做覆蓋谷暮。

? ? ? ? 那么蒿往,異常在子父類覆蓋中的體現(xiàn)是什么樣呢?

? ? ? ? 異常在子父類中覆蓋中的體現(xiàn):

? ? ? ? 1湿弦,子類在覆蓋父類時(shí)瓤漏,如果父類的方法拋出異常,那么子類的覆蓋方法,只能拋出父類的異呈叱洌或者該異常的子類蝶俱。

? ? ? ? 舉例:

? ? ? ? B異常是A異常的子類。

? ? ? ? 這是為什么呢饥漫?父類已經(jīng)有問題了榨呆,子類在繼承父類的時(shí)候,不能比父類還有問題庸队,只能說是和父類一樣的問題积蜻,或者是父類問題的子問題。

? ? ? ? 我們用一個(gè)例子來說明:

? ? ? ? 我們定義了一個(gè)Test類彻消,其中有一個(gè)function方法竿拆,它的function方法接收了Fu類的引用,調(diào)用了Fu類的show方法宾尚。

? ? ? ? function調(diào)用的是一個(gè)拋出異常的方法丙笋,是不是要么拋要么try呀?

? ? ? ? 我們先try一下:

? ? ? ? 然后在主函數(shù)中創(chuàng)建Test對(duì)象煌贴,調(diào)用function方法就好啦不见。

? ? ? ? 過了一段時(shí)間,來了一個(gè)Zi類崔步,寫了一個(gè)show方法把父類Fu的這個(gè)方法覆蓋掉了稳吮,他拋出的是C異常井濒。

? ? ? ? 我們現(xiàn)在調(diào)用function的時(shí)候給里面?zhèn)鱪ew Zi()(屬于多態(tài))灶似。

? ? ? ? 傳了new Zi()之后會(huì)發(fā)生什么現(xiàn)象呢?

? ? ? ? Test類中的f.show()運(yùn)行的將是Zi類的show方法瑞你,而Zi類的show方法拋出的是C異常酪惭,它能夠處理嗎?

? ? ? ? 不能處理者甲。這就叫做春感,早期的程序,不能處理后續(xù)產(chǎn)生的新異常虏缸。

? ? ? ? 所以鲫懒,不可以讓子類拋新異常,只能夠拋可以處理的異常刽辙。

? ? ? ? 如果窥岩,Zi類在覆蓋Fu類的show方法之后,真的發(fā)生了C異常宰缤,就必須在內(nèi)部處理颂翼,不能拋哦晃洒!

? ? ? ? 2,如果父類方法拋出多個(gè)異常朦乏,子類在覆蓋該方法時(shí)球及,只能拋出父類異常的子集。

? ? ? ? 3呻疹,如果父類或者接口的方法中沒有異常拋出吃引,那么子類在覆蓋方法時(shí),也不可以拋出異常诲宇。如果子類方法發(fā)生了異常际歼,就必須要進(jìn)行try處理惶翻,絕對(duì)不能拋姑蓝。

????04-面向?qū)ο?異常-練習(xí))

? ? ? ? 問題描述:

? ? ? ? 先要對(duì)這個(gè)程序進(jìn)行基本設(shè)計(jì)。

? ? ? ? 這個(gè)面積功能我們?cè)撊绾味x呢吕粗?我們發(fā)現(xiàn)纺荧,可以把面積功能先提取出來,這個(gè)面積呢颅筋,我們可以視為圖形當(dāng)中的拓展功能宙暇。(圖形可以畫出來,但不一定需要求面積议泵,所以是拓展功能)

? ? ? ? 那么占贫,我們可以把它定義成接口。

? ? ? ? 接口Shape:

? ? ? ? 長方形Rec類:

? ? ? ? 創(chuàng)建Rec對(duì)象先口,并調(diào)用getArea方法型奥。

? ? ? ? 我們傳入了負(fù)數(shù)值,這顯然不合常理:

? ? ? ? 該怎么解決呢碉京?

? ? ? ? 以前還比較青蔥的我們會(huì)這樣干:

? ? ? ? 這么做很笨笨噠~

? ? ? ? 為什么說這么做很笨笨厢汹,編譯運(yùn)行:

? ? ? ? 這樣有意義嗎?

? ? ? ? 沒有谐宙,而且它是錯(cuò)的烫葬。按理說,傳了-3和4凡蜻,這個(gè)長方形就不應(yīng)該存在搭综,更別說調(diào)用面積了,所以r.getArea()方法是不應(yīng)該運(yùn)算的划栓,這才是對(duì)的设凹。

? ? ? ? 剛剛那種笨笨方法,叫做正常流程代碼和問題處理代碼結(jié)合得非常緊密茅姜,閱讀性比較差闪朱。而且月匣,當(dāng)發(fā)生錯(cuò)誤之后,處理方法不僅僅是一個(gè)簡單的輸出語句奋姿,而是一大堆處理方法锄开,也就是會(huì)有一大堆代碼來處理這些問題。當(dāng)這些代碼都集中在一起的時(shí)候称诗,閱讀起來會(huì)非常痛苦萍悴。

? ? ? ? 那么怎么辦呢?

? ? ? ? 我們可以只保留正常流程的代碼寓免,當(dāng)異常發(fā)生的時(shí)候癣诱,我們到異常發(fā)生的位置,再去看處理代碼袜香。這是不是就方便多啦撕予?

? ? ? ? 所以,異常的產(chǎn)生可以讓正常流程代碼和異常處理代碼相分離蜈首。

? ? ? ? 我們現(xiàn)在定義一個(gè)非法值的異常:

? ? ? ? 然后將異常在這里拋出:

? ? ? ? 主函數(shù)中用try-catch語句來寫:

? ? ? ? 編譯運(yùn)行:

? ? ? ? 我們?cè)賮矸治鲆幌拢?/p>

????????如果真的出現(xiàn)了問題实抡,傳入了-3和4,長方形就沒有建立成功欢策,求面積也是沒有意義的吆寨,后面再用catch來處理,有意義嗎踩寇?沒有啄清。

? ? ? ? try-catch后面還有很多關(guān)于這個(gè)長方形的代碼,下面的處理是不是全沒有意義呀俺孙?那怎么辦呢辣卒?

? ? ? ? 讓異常繼承它,RuntimeException:

? ? ? ? 一旦發(fā)生這個(gè)問題鼠冕,我不告訴你添寺,我就讓你的程序停掉,因?yàn)閿?shù)據(jù)非法了懈费。數(shù)值都非法了计露,我還如何運(yùn)算呢?沒辦法運(yùn)算呀憎乙。而這個(gè)問題是你造成的票罐,你造成的問題已經(jīng)使得我的運(yùn)算無法繼續(xù),那我就不運(yùn)算辣泞边!我也是有脾氣的该押,哼!

? ? ? ? 這個(gè)時(shí)候阵谚,程序就被停掉蚕礼,代碼需要被修正烟具。

? ? ? ? 這就是繼承RuntimeException的原因。

? ? ? ? 這里也不需要標(biāo)識(shí)啦:

? ? ? ? 不標(biāo)識(shí)的話奠蹬,主函數(shù)中調(diào)用的時(shí)候就不需要處理了朝聋,因?yàn)樗揪筒恢罆?huì)發(fā)生問題:

? ? ? ? 此時(shí)編譯運(yùn)行,結(jié)果就靠譜啦:

? ? ? ? 程序直接結(jié)束囤躁,由虛擬機(jī)來處理冀痕。處理完告訴你,你出現(xiàn)非法值啦狸演,在29行和51行言蛇,你趕緊把這個(gè)值改掉辣!

? ? ? ? 所以就要修改代碼了宵距。

? ? ? ? 用戶在使用Rec對(duì)象的時(shí)候腊尚,就需要判斷一下,他往里面?zhèn)鞯闹当仨毐WC是符合的值才能往里面?zhèn)鳌?/p>

? ? ? ? 再寫一個(gè)圓形Circle類:

? ? ? ? 在主函數(shù)中調(diào)用:

????????編譯運(yùn)行:

? ? ? ? 我們又有一個(gè)問題消玄,那這樣寫的話跟伏,我們還寫這個(gè)自定義異常NoValueException做什么呢丢胚?

? ? ? ? 需要寫噠翩瓜,因?yàn)樽远x異常中會(huì)有我們自己的特有內(nèi)容。而且携龟,如果直接是RumtimeException異常兔跌,我們不能具體的看出是哪一個(gè)異常。如果我們能夠起一個(gè)更有意義的名字峡蟋,比如這里的NoValueException坟桅,是不是就更加方便閱讀啦?

? ? ? ? 所以蕊蝗,我們通常會(huì)起一個(gè)特有的名稱仅乓,就知道發(fā)生了什么問題啦。

? ? ? ? 這叫做對(duì)問題名稱的描述蓬戚。

? ? ? ? 所以夸楣,在這里,我們還是建議子漩,寫成NoValueException:

? ? ? ? 這樣運(yùn)行的時(shí)候拋出的就是NoValueException啦豫喧。這樣名稱會(huì)更直觀一些:

? ? ? ? 這種是RuntimeException,當(dāng)然幢泼,如果其他可以處理的對(duì)象紧显,就需要在方法上聲明,并在調(diào)用的時(shí)候?qū)憈ry-catch語句來處理缕棵。注意孵班,將正常流程寫在try中涉兽,將處理過程寫在catch中,這樣正常流程和異常處理的代碼就成功分離啦篙程,閱讀性會(huì)更好花椭。

????????以后注意啦,寫代碼的時(shí)候會(huì)經(jīng)常碰到問題房午,碰到問題怎么辦呢矿辽?用異常來描述,封裝成對(duì)象郭厌。問題也是個(gè)對(duì)象呢袋倔。

????05-面向?qū)ο?異常-總結(jié))

? ? ? ? 異常:

? ? ? ? 是什么?是對(duì)問題的描述折柠。將問題進(jìn)行對(duì)象的封裝宾娜。

? ? ? ? 異常體系:

? ? ? ? ? ? ? ? Throwable

? ? ? ? ? ? ? ? ? ? ? ? |--Error

? ? ? ? ? ? ? ? ? ? ? ? |--Exception

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |--RuntimeException

? ? ? ? 異常體系的特點(diǎn):異常體系中的所有類以及建立的對(duì)象都具備可拋性,也就是說可以被throw和throws關(guān)鍵字所操作扇售。注意前塔,只有異常體系具備這個(gè)特點(diǎn)。

? ? ? ? throw和throws的用法:

? ? ? ? throw定義在函數(shù)內(nèi)承冰,用于拋出異常對(duì)象华弓。

? ? ? ? throws定義在函數(shù)上,用于拋出異常類困乒,可以拋出多個(gè)用逗號(hào)隔開寂屏。

? ? ? ? 當(dāng)函數(shù)內(nèi)容有throw拋出異常對(duì)象,并未進(jìn)行try處理娜搂,那么必須要在函數(shù)上聲明迁霎,否則都會(huì)編譯失敗。

? ? ? ? 注意:RuntimeException異常除外百宇。也就說考廉,函數(shù)內(nèi)如果拋出的是RuntimeException異常,函數(shù)上可以不用聲明携御。

? ? ? ? 如果函數(shù)聲明了異常昌粤,調(diào)用者需要進(jìn)行處理,處理方法可以throws可以try因痛。

? ? ? ? 異常有兩種:

? ? ? ? 1婚苹,編譯時(shí)被檢測(cè)異常

? ? ? ? ? ? ? ? 該異常在編譯時(shí)如果沒有處理(沒有拋也沒有try),編譯失敗鸵膏。

? ? ? ? ? ? ? ? 該異常被標(biāo)識(shí)膊升,代表這可以被處理。

? ? ? ? 2谭企,運(yùn)行時(shí)異常(編譯時(shí)不檢測(cè))

? ? ? ? ? ? ? ? 在編譯時(shí)廓译,不需要處理评肆,編譯器不檢查。

? ? ? ? ? ? ? ? 該異常的發(fā)生非区,建議不處理瓜挽,讓程序停止。需要對(duì)代碼進(jìn)行修正征绸。

? ? ? ? 異常處理語句:?

? ? ? ? 有三種結(jié)合方式:

? ? ? ? 1久橙,try和catch:

? ? ? ? 2,try和finally:

? ? ? ? 3管怠,try淆衷、catch、finally:

? ? ? ? 注意:1.finally中定義的通常是關(guān)閉資源代碼渤弛,因?yàn)橘Y源必須釋放祝拯。

? ? ? ? 另外,注意在下面這個(gè)例子中這兩種語句的不同:

? ? ? ? ?2她肯,finally只有一種情況不會(huì)執(zhí)行佳头。當(dāng)執(zhí)行到System.exit(0);的時(shí)候,finally不會(huì)執(zhí)行晴氨。

? ? ? ? 自定義異常:

? ? ? ? ? ? ? ? 定義類繼承Exception或者RuntimeException

? ? ? ? ? ? ? ? 1康嘉,為了讓該自定義類具備可拋性

? ? ? ? ? ? ? ? 2,讓該類具備操作異常的共性方法

? ? ? ? ? ? ? ? 當(dāng)要定義自定義異常的信息時(shí)瑞筐,可以使用父類已經(jīng)定義好的功能凄鼻。

? ? ? ? ? ? ? ? 比如異常信息會(huì)傳遞給父類的構(gòu)造函數(shù):

? ? ? ? 自定義異常的好處:

? ? ? ? 自定義異常是按照J(rèn)ava的面相對(duì)象思想腊瑟,將程序中出現(xiàn)的特有問題進(jìn)行封裝聚假。

? ? ? ? 異常的好處:

? ? ? ? ? ? ? ? 1,將問題進(jìn)行封裝闰非。

? ? ? ? ? ? ? ? 2膘格,將正常流程代碼和問題處理代碼相分離,方便于閱讀财松。

? ? ? ? 異常的處理原則:

? ? ? ? ? ? ? ? 1瘪贱,處理方式有兩種:try或者throws

? ? ? ? ? ? ? ? 2,調(diào)用到拋出異常的功能時(shí)辆毡,拋出幾個(gè)菜秦,就處理幾個(gè)。

? ? ? ? ? ? ? ? ? ? ? ? 這時(shí)會(huì)出現(xiàn)一個(gè)try對(duì)應(yīng)多個(gè)catch的情況舶掖。

? ? ? ? ? ? ? ? 3球昨,多個(gè)catch,父類的catch放到最下面眨攘。

? ? ? ? ? ? ? ? 4主慰,catch內(nèi)嚣州,需要定義針對(duì)性的處理方式。不要簡單的定義printStackTrace共螺,或者輸出語句该肴。也不要不寫。(因?yàn)榈渤霈F(xiàn)問題藐不,將不會(huì)有任何的提示和日志文件保留匀哄,會(huì)導(dǎo)致這個(gè)問題就過去了)

? ? ? ? ? ? ? ? ? ? ? ? 當(dāng)捕獲到的異常,本功能處理不了時(shí)雏蛮,可以繼續(xù)在catch中拋出拱雏。

? ? ? ? ? ? ? ? ? ? ? ? 如果該異常處理不了,但并不屬于該功能出現(xiàn)的異常底扳。

? ? ? ? ? ? ? ? ? ? ? ? 可以將異常轉(zhuǎn)換后铸抑,再拋出和該功能相關(guān)的異常。

? ? ? ? ? ? ? ? ? ? ? ? 或者異持阅#可以處理鹊汛,但需要將異常產(chǎn)生的和本功能相關(guān)的問題提供出去。

? ? ? ? ? ? ? ? ? ? ? ? 當(dāng)調(diào)用者知道阱冶,并處理刁憋,也可以將捕獲異常處理后,轉(zhuǎn)換新的異常木蹬。

? ? ? ? 異常的注意事項(xiàng):

? ? ? ? ? ? ? ?在子父類覆蓋時(shí):

? ? ? ? ? ? ? ? 1至耻,子類拋出的異常必須是父類的異常的子類或者子集。

? ? ? ? ? ? ? ? 2镊叁,如果父類或者接口沒有異常拋出時(shí)尘颓,子類覆蓋出現(xiàn)異常,只能try不能拋晦譬。

????06-面向?qū)ο?練習(xí)四)

? ? ? ? 這一節(jié)將有一大串截屏疤苹,因?yàn)椴幌朐谶@些小練習(xí)題上耗費(fèi)太多時(shí)間,就先截下來敛腌,以后閑暇時(shí)間可以慢慢做著玩兒~

? ? ? ? 不想看題之間把這段劃過去就OK啦卧土。?

? ? ? ? 編譯失敗。沒有再func方法上聲明該異常像樊。應(yīng)改成:

? ? ? ? 如果func方法上聲明了該異常尤莺,結(jié)果是:B C D

? ? ? ? 考的是子類的實(shí)例化過程。

? ? ? ? 結(jié)果:Test Demo Test

? ? ? ? 編譯失斏鳌:因?yàn)锳接口中并未定義func方法颤霎,這個(gè)方法是子類特有的。

? ? ? ? A B

? ? ? ? 編譯失敗,因?yàn)锳接口中沒有定義test方法捷绑。

? ? ? ? B C 5

? ? ? ? 編譯失敗韩脑,非靜態(tài)內(nèi)部類中不可以定義靜態(tài)成員。

? ? ? ? 內(nèi)部類中如果定義了靜態(tài)成員粹污,該內(nèi)部類必須被靜態(tài)修飾段多。

? ? ? ? 4 5 showzi showzi

? ? ? ? B C D

? ? ? ? 編譯失敗殉农。因?yàn)楦道字腥鄙倏諈?shù)的構(gòu)造函數(shù)诗充。

? ? ? ? 或者子類應(yīng)該通過super語句指定要調(diào)用的父類中的構(gòu)造函數(shù)脂信。

? ? ? ? 編譯失敗失乾。因?yàn)樽宇惛割愔械膅et方法沒有覆蓋。但是子類調(diào)用的時(shí)候不能明確返回的值是什么類型韧骗。所以這樣的函數(shù)可以存在子父類中市栗。

? ? ? ? 編譯失敗鲫骗。因?yàn)榇蛴 癆”的輸出語句執(zhí)行不到沈贝。

? ? ? ? 記赘苋恕:throw單獨(dú)存在,下面不要定義語句宋下,因?yàn)閳?zhí)行不到嗡善。

? ? ? ? 編譯失敗。多個(gè)catch時(shí)学歧,父類的catch要放在下面罩引。

? ? ? ? 134 13423

? ? ? ? 4

? ??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市枝笨,隨后出現(xiàn)的幾起案子袁铐,更是在濱河造成了極大的恐慌,老刑警劉巖横浑,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剔桨,死亡現(xiàn)場離奇詭異,居然都是意外死亡伪嫁,警方通過查閱死者的電腦和手機(jī)领炫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來张咳,“玉大人,你說我怎么就攤上這事似舵〗呕” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵砚哗,是天一觀的道長龙助。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么提鸟? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任军援,我火速辦了婚禮,結(jié)果婚禮上称勋,老公的妹妹穿的比我還像新娘胸哥。我一直安慰自己,他們只是感情好赡鲜,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布空厌。 她就那樣靜靜地躺著,像睡著了一般银酬。 火紅的嫁衣襯著肌膚如雪嘲更。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天揩瞪,我揣著相機(jī)與錄音赋朦,去河邊找鬼。 笑死李破,一個(gè)胖子當(dāng)著我的面吹牛北发,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播喷屋,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼琳拨,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了屯曹?” 一聲冷哼從身側(cè)響起狱庇,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎恶耽,沒想到半個(gè)月后密任,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡偷俭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年浪讳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涌萤。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡淹遵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出负溪,到底是詐尸還是另有隱情透揣,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布川抡,位于F島的核電站辐真,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜侍咱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一耐床、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧楔脯,春花似錦撩轰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至麸粮,卻和暖如春溉苛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背弄诲。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工愚战, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人齐遵。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓寂玲,卻偏偏與公主長得像,于是被迫代替她去往敵國和親梗摇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拓哟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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