轉(zhuǎn)帖|其它|編輯:郝浩|2010-05-10 13:41:02.000|閱讀 572 次
概述:Java異常處理語(yǔ)法是指是Java開(kāi)發(fā)者最為頭疼的事情,也是整個(gè)Java程序語(yǔ)言中受到輿論攻擊最多的一部分。在Jdk7的研發(fā)過(guò)程中,對(duì)Java異常處理語(yǔ)法進(jìn)行改進(jìn)成為重要任務(wù)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
來(lái)自Coin項(xiàng)目的又一個(gè)細(xì)微語(yǔ)言增強(qiáng)已經(jīng)被包含在Java 7中:由谷歌專(zhuān)任工程師兼Java講師Neal Gafter提出的Java增強(qiáng)異常處理功能。Open JDK開(kāi)發(fā)的領(lǐng)導(dǎo)者Joe Darcy已經(jīng)在其博客上宣布了這個(gè)變化。
此次變動(dòng)增加了兩處對(duì)異常處理機(jī)制的細(xì)微增強(qiáng):
◆Multicatch:開(kāi)發(fā)者現(xiàn)在能夠在一個(gè)catch代碼塊中捕獲多個(gè)異常類(lèi)型;
◆Final Rethrow:它可以讓開(kāi)發(fā)者捕獲一個(gè)異常類(lèi)型及其子類(lèi)型,并且無(wú)需向方法聲明中增加拋出子句,就能重新將其拋出。
過(guò)去我們?cè)诓东@多個(gè)異常類(lèi)型時(shí),往往會(huì)使用以下類(lèi)型的代碼:
} catch (FirstException ex) { logger.error(ex); throw ex; } catch (SecondException ex) { logger.error(ex); throw ex; } |
但是以上代碼除了冗長(zhǎng)外沒(méi)有什么優(yōu)點(diǎn)。一個(gè)解決辦法是找出這兩個(gè)異常類(lèi)型的共同子類(lèi)型,只對(duì)其進(jìn)行捕獲并拋出。但是這種方法通常會(huì)捕獲一些你并不需要的異常。
現(xiàn)在借助于新增的功能,開(kāi)發(fā)者可以使用以下代碼:
這種代碼看上去要簡(jiǎn)潔清晰的多。
第二個(gè)增強(qiáng)功能要復(fù)雜一些。假如開(kāi)發(fā)者希望捕獲所有異常,在進(jìn)行必要的幾個(gè)操作后,再將其拋出。就代碼編寫(xiě)而言并不是一件難事,但是開(kāi)發(fā)者必須在方法聲明中增加一個(gè)拋出子句,來(lái)管理自己代碼發(fā)出的新異常。而現(xiàn)在借助于Final Rethrow,開(kāi)發(fā)者無(wú)需增加一個(gè)異常拋出子句就能完成此項(xiàng)任務(wù):
通過(guò)使用final關(guān)鍵字,開(kāi)發(fā)者可以拋出所需的準(zhǔn)確動(dòng)態(tài)類(lèi)型異常。這樣如果一個(gè)IOException異常發(fā)生,那么IOException將被拋出。當(dāng)然,開(kāi)發(fā)者必須聲明不被捕獲的異常。如果開(kāi)發(fā)者在try代碼塊(在//some more code部分)中沒(méi)有捕獲任何異常,拋出子句則與以前完全相同;反之如果捕獲到某些異常,開(kāi)發(fā)者則可以進(jìn)行相應(yīng)處理。
try { // some code } catch (final Throwable ex) { // some more code throw ex; } |
} catch (FirstException | SecondException ex) { logger.error(ex); throw ex; } |
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn
文章轉(zhuǎn)載自:慧都控件網(wǎng)