6.3-全棧Java筆記:異常處理方法(上)

異常的處理辦法之一 ?捕獲異常

圖1?異常處理?

上面過(guò)程詳細(xì)解析:

1.try

try語(yǔ)句指定了一段代碼褥紫,該段代碼就是一次捕獲并處理的范圍。在執(zhí)行過(guò)程中坝咐,當(dāng)任意一條語(yǔ)句產(chǎn)生異常時(shí),就會(huì)跳過(guò)該段中后面的代碼。代碼中可能會(huì)產(chǎn)生并拋出一種或幾種類(lèi)型的異常對(duì)象粥帚,它后面的catch語(yǔ)句要分別對(duì)這些異常做相應(yīng)的處理。

一個(gè)try語(yǔ)句必須帶有至少一個(gè)catch語(yǔ)句塊或一個(gè)finally語(yǔ)句塊?限次。?

注意事項(xiàng)

當(dāng)異常處理的代碼執(zhí)行結(jié)束以后芒涡,是不會(huì)回到try語(yǔ)句去執(zhí)行尚未執(zhí)行的代碼。

2.catch:

1)每個(gè)try語(yǔ)句塊可以伴隨一個(gè)或多個(gè)catch語(yǔ)句卖漫,用于處理可能產(chǎn)生的不同類(lèi)型的異常對(duì)象费尽。

2)常用方法,這些方法均繼承自Throwable類(lèi)?羊始。

?oString ()方法旱幼,顯示異常的類(lèi)名和產(chǎn)生異常的原因

?getMessage()方法,只顯示產(chǎn)生異常的原因突委,但不顯示類(lèi)名柏卤。

?printStackTrace()方法,用來(lái)跟蹤異常事件發(fā)生時(shí)堆棧的內(nèi)容匀油。

3)Catch捕獲異常時(shí)的捕獲順序:

?如果異常類(lèi)之間有繼承關(guān)系缘缚,在順序安排上需注意。越是頂層的類(lèi)敌蚜,越放在下面桥滨。再不然就直接把多余的catch省略掉。

3.?finally:

1)有些語(yǔ)句钝侠,不管是否發(fā)生了異常该园,都必須要執(zhí)行帅韧,那么就可以把這樣的語(yǔ)句放到finally語(yǔ)句塊中里初。

2)通常在finally中關(guān)閉程序塊已打開(kāi)的資源,比如:文件流、釋放數(shù)據(jù)庫(kù)連接等刁品。

【示例1】典型代碼(先不要敲@盏!)

package?com.bjsxt.four;

import?java.io.FileNotFoundException;

import?java.io.FileReader;

import?java.io.IOException;

public?class?TestReadFile {

????public?static?void?main(String[] args) {

?????? FileReader reader =?null;

???????try{

?????????? reader =?new?FileReader("d:/a.txt");

???????????char?c = (char)reader.read();

???????????char?c2 = (char)reader.read();

?????????? System.out.println(""+c+c2);

?????? }catch(FileNotFoundException e){

?????????? e.?printStackTrace ();

?????? }catch(IOException e){

?????????? e.printStackTrace ();

?????? }finally{

???????????try{

??????????????if(reader!=null){

????????????????? reader.close();

????????????? }

?????????? }catch?(Exception e) {

????????????? e.?printStackTrace ();

?????????? }

?????? }

??? }

}

異常的處理辦法之二 ?聲明異常:throws子句

當(dāng)Checked Exception產(chǎn)生時(shí)魁淳,不一定立刻處理它蒸走,可以再把異常Throws出去别惦。

在方法中使用try-chatch-finally由這個(gè)方法處理異常掸掸。在一些情況下扰付,當(dāng)前方法并不需要處理發(fā)生的異常荒给,而是向上傳遞給調(diào)用它的方法處理志电。

如果一個(gè)方法中可能產(chǎn)生某種異常蚀乔,但是并不能確定如何處理這種異常,則應(yīng)根據(jù)異常規(guī)范在方法的首部聲明該方法可能拋出的異常氯哮。

如果一個(gè)方法拋出多個(gè)已檢查異常良姆,就必須在方法的首部列出所有的異常韩玩,之間以逗號(hào)隔開(kāi)帘不。

【示例2】典型代碼(先不敲!):

import?java.io.FileNotFoundException;

import?java.io.FileReader;

import?java.io.IOException;

public?class?Test {

????public?static?void?main(String[] args) {

???????try?{?

???????????readFile("joke.txt");

?????? }?catch?(FileNotFoundException e) {

? ? ? ? ? ?System.out.println("所需文件不存在灰殴!");

?????? }?catch?(IOException e) {

?????????? System.out.println("文件讀寫(xiě)錯(cuò)誤碱工!");

?????? }

??? }

????public?static?void?readFile(String ? fileName)?throws?FileNotFoundException,IOException {

?????? FileReader in =?new?FileReader(fileName);

???????int?tem = 0;

???????try?{?

?????????? tem = in.read();

???????????while?(tem != -1) {

????????????? System.out.print((char) tem);???????

????????????? tem = in.read();

?????????? }

?????? }?finally?{???? ?

?????????? in.close();??

?????? }

??? }

}

自定義異常

在程序中,可能會(huì)遇到任何標(biāo)準(zhǔn)異常類(lèi)都沒(méi)有充分的描述清楚的問(wèn)題,這種情況下可以創(chuàng)建自己的異常類(lèi)苏揣。

從Exception類(lèi)或者它的子類(lèi)派生一個(gè)子類(lèi)即可?校翔。

習(xí)慣上蔫敲,定義的類(lèi)應(yīng)該包含2個(gè)構(gòu)造器:一個(gè)是默認(rèn)的構(gòu)造器践图,另一個(gè)是帶有詳細(xì)信息的構(gòu)造器缨叫。

【示例3】自定義異常類(lèi)

class? ? IllegalAgeException??????extends?? Exception {

????public?IllegalAgeException?? () {

??? }

????public?IllegalAgeException?? (String? ? msg) {

???????super(msg);

??? }

}

示例4】自定義異常類(lèi)的使用

class?Person {

????private?String name;

????private?int?age;

????public?void?setName(String name) {

???????this.name = name;

??? }

????public?void?setAge(int?age) {

???????if?(age < 0)

???????????throw?new?IllegalAgeException?? ("人的年齡不應(yīng)該為負(fù)數(shù)");

???????this.age = age;

??? }

????public?String toString() {

???????return?"name is " + name + " and age ? is " + age;

??? }

}

public?class?MyExceptionTest {

????public?static?void?main(String[] args) {

?????? Person p =?new?Person();

???????try?{

?????????? p.setName("Lincoln");

?????????? p.setAge(-1);

?????? }?catch?(IllegalAgeException??? e) {

?????????? e.printStackTrace();

?????????? System.exit(-1);

?????? }

?????? System.out.println(p);

??? }

}

使用異常機(jī)制的建議

1.?要避免使用異常處理代替錯(cuò)誤處理婉商,這樣會(huì)降低程序的清晰性,并且效率低下渣叛。

2.處理異常不可以代替簡(jiǎn)單測(cè)試---?只在異常情況下使用異常機(jī)制

3.不要進(jìn)行小粒度的異常處理---應(yīng)該將整個(gè)任務(wù)包裝在一個(gè)Try語(yǔ)句塊中

4.?異常往往在高層處理(先了解丈秩!后面做項(xiàng)目會(huì)說(shuō)!)

如何利用百度解決異常問(wèn)題

正常學(xué)習(xí)和開(kāi)發(fā)中淳衙,我們經(jīng)常會(huì)遇到各種異常蘑秽。大家在遇到異常時(shí),需要遵循下面三步來(lái)解決:

1. ?細(xì)心查看異常信息箫攀,確定異常種類(lèi)和相關(guān)JAVA代碼行號(hào)

2. ?拷貝異常信息到百度肠牲,查看相關(guān)帖子,尋找解決思路

3.??前兩步無(wú)法搞定靴跛,再問(wèn)同學(xué)或同事缀雳。

4.??前三步無(wú)法搞定,請(qǐng)示領(lǐng)導(dǎo)梢睛。

很多同學(xué)碰到異常一下就慌了肥印,立刻開(kāi)始請(qǐng)教別人搬救兵,殊不知這樣做有兩大壞處扬绪。

第一竖独、太不尊重別人,把別人當(dāng)苦力挤牛。

第二莹痢、失去提高的機(jī)會(huì),自己解決一個(gè)異常墓赴,就意味這有能力解決一類(lèi)異常竞膳。

解決一個(gè)異常能大大提高自身能力。




「全棧Java筆記」是一部能幫大家從零到一成長(zhǎng)為全棧Java工程師系列筆記诫硕。筆者江湖人稱(chēng) Mr. G坦辟,10年Java研發(fā)經(jīng)驗(yàn),曾在神州數(shù)碼章办、航天院某所研發(fā)中心從事軟件設(shè)計(jì)及研發(fā)工作锉走,從小白逐漸做到工程師滨彻、高級(jí)工程師、架構(gòu)師挪蹭。精通Java平臺(tái)軟件開(kāi)發(fā)亭饵,精通JAVAEE,熟悉各種流行開(kāi)發(fā)框架梁厉。


筆記包含從淺入深的六大部分:

A-Java入門(mén)階段

B-數(shù)據(jù)庫(kù)從入門(mén)到精通

C-手刃移動(dòng)前端和Web前端

D-J2EE從了解到實(shí)戰(zhàn)

E-Java高級(jí)框架精解

F-Linux和Hadoop?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末辜羊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子词顾,更是在濱河造成了極大的恐慌八秃,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肉盹,死亡現(xiàn)場(chǎng)離奇詭異昔驱,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)上忍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)舍悯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人睡雇,你說(shuō)我怎么就攤上這事∫迹” “怎么了它抱?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)朴艰。 經(jīng)常有香客問(wèn)我观蓄,道長(zhǎng),這世上最難降的妖魔是什么祠墅? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任侮穿,我火速辦了婚禮,結(jié)果婚禮上毁嗦,老公的妹妹穿的比我還像新娘亲茅。我一直安慰自己,他們只是感情好狗准,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布克锣。 她就那樣靜靜地躺著,像睡著了一般腔长。 火紅的嫁衣襯著肌膚如雪袭祟。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天捞附,我揣著相機(jī)與錄音巾乳,去河邊找鬼您没。 笑死,一個(gè)胖子當(dāng)著我的面吹牛胆绊,可吹牛的內(nèi)容都是我干的氨鹏。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼辑舷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼喻犁!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起何缓,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤肢础,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后碌廓,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體传轰,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年谷婆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了慨蛙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纪挎,死狀恐怖期贫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情异袄,我是刑警寧澤通砍,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站烤蜕,受9級(jí)特大地震影響封孙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜讽营,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一虎忌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧橱鹏,春花似錦膜蠢、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至贮勃,卻和暖如春贪惹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寂嘉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工奏瞬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留枫绅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓硼端,卻偏偏與公主長(zhǎng)得像并淋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子珍昨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法县耽,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法镣典,繼承相關(guān)的語(yǔ)法兔毙,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,581評(píng)論 18 399
  • 八兄春、深入理解java異常處理機(jī)制 引子try…catch…finally恐怕是大家再熟悉不過(guò)的語(yǔ)句了澎剥, 你的答案是...
    壹點(diǎn)零閱讀 1,530評(píng)論 0 0
  • 上節(jié)回顧:在學(xué)習(xí)了Socket建立客戶(hù)端和服務(wù)器雙向交流后,我們發(fā)現(xiàn)它的問(wèn)答形式不夠靈活赶舆。 本節(jié)課我們講解如何在服...
    全棧JAVA筆記閱讀 243評(píng)論 0 0
  • 初學(xué)Java哑姚,一直搞不懂java里面的io關(guān)系,在網(wǎng)上找了很多大多都是給個(gè)結(jié)構(gòu)圖草草描述也看的不是很懂芜茵。而且沒(méi)有結(jié)...
    賭書(shū)只道是尋常閱讀 405評(píng)論 1 2
  • 歲月涼衣衫薄叙量,你是四月花為歇。 ——《吃藥筆記》
    童瀟閱讀 133評(píng)論 0 0