在Java中,拋出異常之后,如果不對異常進(jìn)行處理,代碼會一直往調(diào)用的上層拋,直到線程的執(zhí)行器,如果在這里異常仍然未得到處理,線程將停止執(zhí)行。所以拋出異常后如果不對異常進(jìn)行處理,后面的代碼將不會執(zhí)行。
創(chuàng)新互聯(lián)是一家以成都網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、品牌設(shè)計、軟件運維、seo優(yōu)化排名、小程序App開發(fā)等移動開發(fā)為一體互聯(lián)網(wǎng)公司。已累計為成都航空箱等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開發(fā)服務(wù)。
比如以下代碼:
public void testException throws Exception(){
System.out.println("start");
throw new Exception("test exception");
System.out.println("execute ended?");
}最后一行代碼在異常拋出之后,這行代碼是不會執(zhí)行的。
直接throws Exception 寫在你的方法或者類名后
或者用try catch
在 Java 應(yīng)用程序中,異常處理機(jī)制為:拋出異常,捕捉異常。
拋出異常:當(dāng)一個方法出現(xiàn)錯誤引發(fā)異常時,方法創(chuàng)建異常對象并交付運行時系統(tǒng),異常對象中包含了異常類型和異常出現(xiàn)時的程序狀態(tài)等異常信息。運行時系統(tǒng)負(fù)責(zé)尋找處置異常的代碼并執(zhí)行。
捕獲異常:在方法拋出異常之后,運行時系統(tǒng)將轉(zhuǎn)為尋找合適的異常處理器(exception handler)。潛在的異常處理器是異常發(fā)生時依次存留在調(diào)用棧中的方法的集合。當(dāng)異常處理器所能處理的異常類型與方法拋出的異常類型相符時,即為合適 的異常處理器。運行時系統(tǒng)從發(fā)生異常的方法開始,依次回查調(diào)用棧中的方法,直至找到含有合適異常處理器的方法并執(zhí)行。當(dāng)運行時系統(tǒng)遍歷調(diào)用棧而未找到合適 的異常處理器,則運行時系統(tǒng)終止。同時,意味著Java程序的終止。
對于運行時異常、錯誤或可查異常,Java技術(shù)所要求的異常處理方式有所不同。
由于運行時異常的不可查性,為了更合理、更容易地實現(xiàn)應(yīng)用程序,Java規(guī)定,運行時異常將由Java運行時系統(tǒng)自動拋出,允許應(yīng)用程序忽略運行時異常。
對于方法運行中可能出現(xiàn)的Error,當(dāng)運行方法不欲捕捉時,Java允許該方法不做任何拋出聲明。因為,大多數(shù)Error異常屬于永遠(yuǎn)不能被允許發(fā)生的狀況,也屬于合理的應(yīng)用程序不該捕捉的異常。
try{}catch(Exception e){
}
try的大括號里是可能出現(xiàn)異常的代碼
拋出異常有兩種方式 1.. 直接在方法的()后 {}前 throws XXException XX是指代你要拋出的異常類型 2. try括住將會出現(xiàn)異常的代碼 在catch之后 throw new XXException 即捕獲后拋出
如果使用了try ?catch 代碼塊,來捕獲和處理異常, 那么后面的代碼,可以執(zhí)行
如果沒有捕獲處理異常, 那么后面的代碼無法執(zhí)行.
一般可以分成三面三種情形.
參考代碼
public?class?Test?{
public?static?void?main(String[]?args)?{
//情形一:?try?catch?finally?模塊
int[]?ary?=?{5};
try?{
System.out.println("代碼1");//這里會執(zhí)行
int?x?=?ary[3];//數(shù)組下標(biāo)越界,?會拋出異常,跳到catch代碼塊里,去執(zhí)行代碼?.代碼2無法被執(zhí)行
System.out.println("代碼2");//這里不會執(zhí)行
}catch?(Exception?e)?{
System.out.println("代碼3");//如果捕獲到了異常?,這里的代碼會執(zhí)行
}finally?{//finally的代碼,總會執(zhí)行
System.out.println("代碼4");//這里會執(zhí)行
}
//情形二:?try?finally?
try?{
System.out.println("代碼5");?//這里會執(zhí)行
int?y=ary[3];?//這里還是會拋出異常,?數(shù)組下標(biāo)越界.
System.out.println("代碼6");//這里不會執(zhí)行
}finally?{?//finally的代碼,總會執(zhí)行
System.out.println("代碼7");//?這里會執(zhí)行
}
//情形三:?沒有try?catch?fianlly
int?z?=ary[3];//這里還是會拋出異常,?數(shù)組下標(biāo)越界.?并且沒有使用try?catch等代碼塊,后面的代碼無法執(zhí)行
System.out.println("代碼8");//?這里不會執(zhí)行
}
}
拓展:
由于 ...finally代碼塊里面的代碼總會執(zhí)行, 所以, 一般釋放IO資源, 釋放數(shù)據(jù)庫資源,等操作, 都放到finally代碼塊里.
網(wǎng)站名稱:java拋出代碼,java錯誤拋出
標(biāo)題URL:http://chinadenli.net/article46/hohseg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、Google、企業(yè)建站、網(wǎng)站改版、網(wǎng)站排名、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)