創(chuàng)新互聯(lián)www.cdcxhl.cn八線(xiàn)動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買(mǎi)多久送多久,劃算不套路!
為邕寧等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及邕寧網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、邕寧網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)java中異常處理機(jī)制的作用有哪些,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
Java異常處理機(jī)制其最主要的幾個(gè)關(guān)鍵字:try、catch、finally、throw、throws,以及各種各樣的Exception。本篇文章主要在基礎(chǔ)的使用方法上,介紹了如何更加合理的使用異常機(jī)制?!?/p>
try-catch-finally
try-catch-finally塊的用法比較簡(jiǎn)單,使用頻次也最高。try塊中包含可能出現(xiàn)異常的語(yǔ)句(當(dāng)然這是人為決定的,try理論上可以包含任何代碼),catch塊負(fù)責(zé)捕獲可能出現(xiàn)的異常,finally負(fù)責(zé)執(zhí)行必須執(zhí)行的語(yǔ)句,這里的代碼不論是否發(fā)生了異常,都會(huì)被執(zhí)行。
針對(duì)這部分,因?yàn)楹芑A(chǔ),所以就提幾點(diǎn)比較關(guān)鍵的建議:
1、當(dāng)你在寫(xiě)try-catch語(yǔ)句的時(shí)候,腦子里是知道自己要去針對(duì)哪種異常進(jìn)行處理的,不要只是以防萬(wàn)一,加了個(gè)catch(Exception e),這是毫無(wú)意義的。并且,一個(gè)try塊中可能有多個(gè)異常,對(duì)于每一類(lèi)異常,要分別寫(xiě)一個(gè)catch進(jìn)行捕獲?! ?/p>
2、針對(duì)可能出現(xiàn)異常的語(yǔ)句進(jìn)行try-catch,大段代碼的try-catch會(huì)非常不利于維護(hù)代碼時(shí)定位異??赡馨l(fā)生的位置,對(duì)于肯定不會(huì)發(fā)生異常的穩(wěn)定的代碼,不需要放在try塊中。
3、try-catch雖然在功能上,可以成為流程控制的工具,達(dá)到條件分支的效果。但相比于if-else語(yǔ)句,java的異常處理機(jī)制基于面向?qū)ο蟮乃枷?,使用過(guò)程中需要更多的時(shí)間與空間的開(kāi)銷(xiāo),所以不要用異常機(jī)制去做基本的條件判斷,只有在程序會(huì)因?yàn)楫惓6袛鄷r(shí)進(jìn)行捕獲和處理。
4、finally塊中永遠(yuǎn)不要寫(xiě)return語(yǔ)句,因?yàn)閒inally塊中總是最后執(zhí)行,他會(huì)改變預(yù)期在try和catch塊中的返回值(舉個(gè)例子,你在catch中捕獲了一個(gè)異常并拋出e,又在finally語(yǔ)句中return true,這樣你拋出的異常就"消失"了,因?yàn)楫?dāng)前函數(shù)的執(zhí)行結(jié)果已經(jīng)從拋出異常 轉(zhuǎn)變成 return true)。另外,在使用資源對(duì)象與流對(duì)象時(shí),finally塊必須對(duì)資源對(duì)象、流對(duì)象進(jìn)行關(guān)閉。
Java異常體系結(jié)構(gòu)
Java異常體系的基類(lèi)是Throwable,它主要有兩個(gè)子類(lèi):Error 和 Exception。其結(jié)構(gòu)如下圖:
上圖中,Error是指程序無(wú)法處理的錯(cuò)誤,多指系統(tǒng)內(nèi)部比較嚴(yán)重的錯(cuò)誤。大多數(shù)這類(lèi)錯(cuò)誤與開(kāi)發(fā)人員無(wú)關(guān),我們關(guān)注的主要是Exception。
Exception主要分為兩塊:運(yùn)行時(shí)異常和非運(yùn)行時(shí)異常。RuntimeException及其子類(lèi)都稱(chēng)為運(yùn)行時(shí)異常;除此之外, 所有Exception的子類(lèi)異常都是非運(yùn)行時(shí)異常。
運(yùn)行時(shí)異常多指程序邏輯上出現(xiàn)問(wèn)題(也就是我們自己寫(xiě)代碼邏輯出了問(wèn)題),常見(jiàn)的錯(cuò)誤包括 ClassCastException:類(lèi)型轉(zhuǎn)換異常、NullPointerException:空指針異常、IndexOutOfBoundsException:越界異常...這些異常都可以通過(guò)程序邏輯處理來(lái)避免(比如加一個(gè)判斷語(yǔ)句判斷是否越界、是否屬于某類(lèi)型、是否為null),所以編譯器把這些工作交給了程序員來(lái)把控,在編譯期即使手動(dòng)拋出了一個(gè)運(yùn)行時(shí)異常不去捕獲,編譯器也會(huì)通過(guò)。因而這類(lèi)異常也叫做"未檢查異常"(uncheck)。同樣屬于未檢查異常的還有所有的Error。即上圖中,所有藍(lán)色框表示未檢查異常,橙色框表示"檢查異常"(check)。對(duì)于檢查異常,在可能發(fā)生異常的位置需要用try-catch塊去捕獲并處理,如果不處理它,就會(huì)一直向上層調(diào)用拋出,直到被處理為止。
throw 與 throws
throws關(guān)鍵字主要在方法簽名中使用,用于聲明該方法可能拋出的異常。throws 可以理解成是一種通知行為,沒(méi)有實(shí)際的拋出異常的動(dòng)作,而僅僅是告訴調(diào)用他的上層函數(shù),這里可能會(huì)拋出這個(gè)異常;
throw用于在函數(shù)體內(nèi)語(yǔ)句中,表示拋出一個(gè)實(shí)際的異常的實(shí)際動(dòng)作,如果在函數(shù)內(nèi)沒(méi)有捕獲并處理,那么將會(huì)一直向上拋出這個(gè)異常直到被main()/Thread.run()拋出。
當(dāng)一個(gè)函數(shù)throws聲明函數(shù)可能拋出一個(gè)非運(yùn)行時(shí)異常(檢查異常)時(shí),那么即使這個(gè)函數(shù)內(nèi)部不顯示使用throw,調(diào)用它的上層函數(shù)也必須包含處理這個(gè)異常的代碼。舉個(gè)例子:
public class Main {
public static void main(String[] args){
exceptionTest();
}
static int exceptionTest() throws IOException {
return 0;
}
}
上述代碼中調(diào)用的exceptionTest函數(shù)聲明拋出一個(gè)IOException屬于檢查異常,哪怕exceptionTest函數(shù)中不可能拋出這個(gè)異常,調(diào)用它的函數(shù)也必須對(duì)此異常做出捕獲處理?,F(xiàn)在main函數(shù)中沒(méi)有相關(guān)的處理邏輯,所以會(huì)編譯錯(cuò)誤,如下圖:
而對(duì)運(yùn)行時(shí)異常,就是另一種情況了:
public class Main { public static void main(String[] args){ int i = divideTest(0); System.out.println(i); } static int divideTest(int b) throws ArithmeticException { int i = 5/b; return i; } }
新聞標(biāo)題:java中異常處理機(jī)制的作用有哪些-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://muchs.cn/article16/pgsdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、App設(shè)計(jì)、網(wǎng)站維護(hù)、網(wǎng)站收錄、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容