新聞中心
關(guān)于java中異常處理機(jī)制方面的內(nèi)容,我們之前給大家介紹過(guò),大家可以參考這篇文章,全面掌握J(rèn)ava的異常處理機(jī)制。下面來(lái)看本文的介紹。

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),東蘭企業(yè)網(wǎng)站建設(shè),東蘭品牌網(wǎng)站建設(shè),網(wǎng)站定制,東蘭網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,東蘭網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
當(dāng)出現(xiàn)程序無(wú)法控制的外部環(huán)境問(wèn)題(用戶提供的文件不存在,文件內(nèi)容損壞,網(wǎng)絡(luò)不可用...)時(shí),JAVA就會(huì)用異常對(duì)象來(lái)描述。
JAVA中用2種方法處理異常:
1.在發(fā)生異常的地方直接處理;
2.將異常拋給調(diào)用者,讓調(diào)用者處理。
JAVA異常可分為3種:
- 檢查性異常:java.lang.Exception
- 運(yùn)行期異常:java.lang.RuntimeException
- 錯(cuò)誤:java.lang.Error
頂層是java.lang.Throwable類,檢查性異常,運(yùn)行期異常,錯(cuò)誤都是這個(gè)類的子孫類。
java.lang.Exception和java.lang.Error繼承自java.lang.Throwable,而java.lang.RuntimeException繼承自java.lang.Exception.
檢查性異常------程序正確,但因?yàn)橥庠诘沫h(huán)境條件不滿足引發(fā)。例如:用戶錯(cuò)誤及I/O問(wèn)題----程序試圖打開一個(gè)并不存在的遠(yuǎn)程Socket端口。這不是程序本身的邏輯錯(cuò)誤,而很可能是遠(yuǎn)程機(jī)器名字錯(cuò)誤(用戶拼寫錯(cuò)誤)。對(duì)商用軟件系統(tǒng),程序開發(fā)者必須考慮并處理這個(gè)問(wèn)題。JAVA編譯器強(qiáng)制要求處理這類異常,如果不捕獲這類異常,程序?qū)⒉荒鼙痪幾g。
運(yùn)行期異常------這意味著程序存在bug,如數(shù)組越界,0被除,入?yún)⒉粷M足規(guī)范.....這類異常需要更改程序來(lái)避免,JAVA編譯器強(qiáng)制要求處理這類異常。
錯(cuò)誤------一般很少見,也很難通過(guò)程序解決。它可能源于程序的bug,但一般更可能源于環(huán)境問(wèn)題,如內(nèi)存耗盡。錯(cuò)誤在程序中無(wú)須處理,而有運(yùn)行環(huán)境處理。
如何處理異常?
1.try...catch
程序運(yùn)行產(chǎn)生異常時(shí),將從異常發(fā)生點(diǎn)中斷程序并向外拋出異常信息。
- int x = (int)(Math.random()*5);
- int y = (int)(Math.random()*10);
- int[] z =new int[5];
- try
- {
- System.out.println("y/x="+(y/x));
- System.out.println("y="+y+"z[y]="+z[y]);
- }
- catch (ArithmeticException exc1)
- {
- System.out.println("算術(shù)運(yùn)算異常:"+exc1.getMessage());
- }
- catch (ArrayIndexOutOfBoundsException exc2)
- {
- System.out.println("數(shù)據(jù)越界異常:"+exc2.getMessage());
- }
說(shuō)明:ArithmeticException和ArrayIndexOutOfBoundsException都屬運(yùn)行期異常:java.lang.RuntimeException,如果不用try...catch捕獲,程序也是可通過(guò)編譯的,但如果屬于檢查性異常:java.lang.Exception,必須而且一定要用try...catch...對(duì)其進(jìn)行處理。
2.finally
如果把finally塊置try...catch...語(yǔ)句后,finally塊一般都會(huì)得到執(zhí)行,它相當(dāng)于一個(gè)***的保險(xiǎn),即使前面的try塊發(fā)生異常,而又沒有對(duì)應(yīng)異常的catch塊,finally塊將馬上執(zhí)行。
以下情形,finally塊將不會(huì)被執(zhí)行:
(1)finally塊中發(fā)生了異常;
(2)程序所在線程死亡;
(3)在前面的代碼中用了System.exit();
(4)關(guān)閉CPU。
3.多個(gè)異常的處理規(guī)則:
定義多個(gè)catch可精確地定位異常。如果為子類的異常定義了特殊的catch塊,而父類的異常則放在另外一個(gè)catch塊中,此時(shí),必須滿足以下規(guī)則:子類異常的處理塊必須在父類異常處理塊的前面,否則會(huì)發(fā)生編譯錯(cuò)誤。所以,越特殊的異常越在前面處理,越普遍的異常越在后面處理。這類似于制訂防火墻的規(guī)則次序:較特殊的規(guī)則在前,較普通的規(guī)則在后。
自己也可以定義并拋出異常,方法是2步:創(chuàng)建異常,拋出異常(首先實(shí)例化一個(gè)異常對(duì)象,然后用thow拋出)合在一起就是----
thow new IOException("異常說(shuō)明信息")。將創(chuàng)建異常,拋出異常合在一起的好處是:創(chuàng)建異常時(shí),會(huì)包含異常創(chuàng)建處的行信息,異常被捕獲時(shí)可以通過(guò)堆棧跡(stack Trace)的形式報(bào)告這些信息。如果在同一行代碼創(chuàng)建和拋出異常,對(duì)于程序的調(diào)試將非常有用。
所以,thow new XXX()已經(jīng)成為一個(gè)標(biāo)準(zhǔn)的異常拋出范式。
在定義一個(gè)方法時(shí),方法塊中調(diào)用的方法可能會(huì)拋出異常,可用上面的thow new XXX()處理,如果不處理,那么必須在方法定義時(shí),用thows聲明這個(gè)方法會(huì)拋出的異常。
對(duì)異常的處理,有一條行之有效的默認(rèn)規(guī)則:向上拋出-----被調(diào)用類在運(yùn)行過(guò)程中對(duì)遇到的異常一概不作處理,而是直接向上拋出,一直到最上層的調(diào)用類,調(diào)用類根據(jù)應(yīng)用系統(tǒng)的需求和特定的異常處理規(guī)則進(jìn)行處理,如向控制臺(tái)輸出異常堆棧信息,打印在日志文件中。用一句形象的話來(lái)說(shuō),就是誰(shuí)使用,誰(shuí)(最上層的調(diào)用類)處理。
希望通過(guò)本文的介紹,你能夠?qū)ava中的異常處理機(jī)制有了大體的了解。
分享題目:詳細(xì)介紹Java異常處理機(jī)制
鏈接地址:http://m.fisionsoft.com.cn/article/dhcpdco.html


咨詢
建站咨詢
