首先你使用的是判斷代碼快,在代碼快的編寫上就錯(cuò)誤了。不論是java和是C#,進(jìn)行異常處理需要使用的外側(cè)代碼只有try{}catch{}finally try塊中的語(yǔ)句就是可能要發(fā)生異常的代碼,catch中的語(yǔ)句就是如果try中的語(yǔ)句發(fā)生了異常那么就執(zhí)行catch中的代碼。finally是一個(gè)可選的,無論是否發(fā)生異常都要進(jìn)行執(zhí)行的代碼放在finally中。
創(chuàng)新互聯(lián)專注于網(wǎng)站建設(shè)|成都網(wǎng)站維護(hù)|優(yōu)化|托管以及網(wǎng)絡(luò)推廣,積累了大量的網(wǎng)站設(shè)計(jì)與制作經(jīng)驗(yàn),為許多企業(yè)提供了網(wǎng)站定制設(shè)計(jì)服務(wù),案例作品覆蓋成都圍欄護(hù)欄等行業(yè)。能根據(jù)企業(yè)所處的行業(yè)與銷售的產(chǎn)品,結(jié)合品牌形象的塑造,量身定制品質(zhì)網(wǎng)站。
直接throws Exception 寫在你的方法或者類名后
或者用try catch
在 Java 應(yīng)用程序中,異常處理機(jī)制為:拋出異常,捕捉異常。
拋出異常:當(dāng)一個(gè)方法出現(xiàn)錯(cuò)誤引發(fā)異常時(shí),方法創(chuàng)建異常對(duì)象并交付運(yùn)行時(shí)系統(tǒng),異常對(duì)象中包含了異常類型和異常出現(xiàn)時(shí)的程序狀態(tài)等異常信息。運(yùn)行時(shí)系統(tǒng)負(fù)責(zé)尋找處置異常的代碼并執(zhí)行。
捕獲異常:在方法拋出異常之后,運(yùn)行時(shí)系統(tǒng)將轉(zhuǎn)為尋找合適的異常處理器(exception handler)。潛在的異常處理器是異常發(fā)生時(shí)依次存留在調(diào)用棧中的方法的集合。當(dāng)異常處理器所能處理的異常類型與方法拋出的異常類型相符時(shí),即為合適 的異常處理器。運(yùn)行時(shí)系統(tǒng)從發(fā)生異常的方法開始,依次回查調(diào)用棧中的方法,直至找到含有合適異常處理器的方法并執(zhí)行。當(dāng)運(yùn)行時(shí)系統(tǒng)遍歷調(diào)用棧而未找到合適 的異常處理器,則運(yùn)行時(shí)系統(tǒng)終止。同時(shí),意味著Java程序的終止。
對(duì)于運(yùn)行時(shí)異常、錯(cuò)誤或可查異常,Java技術(shù)所要求的異常處理方式有所不同。
由于運(yùn)行時(shí)異常的不可查性,為了更合理、更容易地實(shí)現(xiàn)應(yīng)用程序,Java規(guī)定,運(yùn)行時(shí)異常將由Java運(yùn)行時(shí)系統(tǒng)自動(dòng)拋出,允許應(yīng)用程序忽略運(yùn)行時(shí)異常。
對(duì)于方法運(yùn)行中可能出現(xiàn)的Error,當(dāng)運(yùn)行方法不欲捕捉時(shí),Java允許該方法不做任何拋出聲明。因?yàn)?,大多?shù)Error異常屬于永遠(yuǎn)不能被允許發(fā)生的狀況,也屬于合理的應(yīng)用程序不該捕捉的異常。
一般如果出現(xiàn)非人為異常,即非通過代碼throw的方式拋出異常,同時(shí)未通過try-catch捕捉。則當(dāng)前代碼不會(huì)繼續(xù)執(zhí)行,而是向上拋出異常,即返回調(diào)用當(dāng)前代碼的位置。如果該位置未對(duì)異常進(jìn)行處理,則繼續(xù)向上拋出。
通過try-catch捕捉異常,即異常代碼在try中,可以在catch中進(jìn)行異常處理
try{ ... //代碼,產(chǎn)生異常}catch(Exception e){//e是異常類型,一般根父類為Exception類 ... //進(jìn)行產(chǎn)生異常后的處理}finally{ ... //無論如何都會(huì)執(zhí)行的代碼}...//如果catch中沒有繼續(xù)throw異常以及沒有產(chǎn)生新異常,則繼續(xù)執(zhí)行的代碼
如果想要代碼繼續(xù)執(zhí)行,可以在catch中不繼續(xù)拋出異常,則代碼將執(zhí)行catch之后的代碼(如果有finally,則先執(zhí)行finally的代碼)。如果想要在產(chǎn)生異常之后仍需要執(zhí)行一部分代碼,則可以將該部分代碼放在finally中。
return會(huì)執(zhí)行的。
try{}里面包含可能會(huì)出錯(cuò)的代碼?如果里面出錯(cuò)了,他回交給catch{}處理,catch可能把這個(gè)錯(cuò)誤給屏蔽掉(就比如說你牙疼不能吃飯,給給力來個(gè)止疼的,不影響你做其他的事情了)。。不影響你之后的代碼運(yùn)行。。但是如果你try{}里面有多行代碼第一行,第二行,第三行,如果第二行出錯(cuò)了,第三行是不執(zhí)行的。如果有finally{}這里里面代碼是處理后事的。比如說,你try里面有操作工作流的,那么如果出錯(cuò)了fianlly可以用力處理,關(guān)閉工作流對(duì)象,避免浪費(fèi)資源。finally{}是必須執(zhí)行的,不是管是出錯(cuò)了,還是不出錯(cuò)。
java中拋出異常后面的代碼不會(huì)執(zhí)行,測(cè)試代碼如下:
public?class?Test?{
public?static?void?main(String[]?args)?{
int?i?=?10;
try?{
//?此處會(huì)報(bào)錯(cuò)
int?j?=?i?/?0;
System.out.println("hello");
}?catch?(Exception?e)?{
e.printStackTrace();
}
}
}
執(zhí)行結(jié)果:
class?Math?{
public?static?float?div(float?x,?float?y)?throws?Exception?{
System.out.println("=====計(jì)算開始=====");
float?temp?=?0;
try?{
temp?=?x?/?y;
}?catch?(Exception?e)?{
throw?e;
}?finally?{
System.out.println("=====計(jì)算結(jié)束=====");
}
return?temp;
}
}
public?class?danci?{
public?static?void?main(String[]?args)?{
try?{
float?i?=?0;
float?j?=?0;
// String?st1?=?args[0];
// String?st2?=?args[1];
// i?=?Float.parseFloat(st1);
// j?=?Float.parseFloat(st2);
System.out.println(i?+?"?除?"?+?j?+?"?=?"?+?Math.div(i,?j));
}?catch?(Exception?e)?{
System.out.println("異常產(chǎn)生:"?+?e);
}
}
}
因?yàn)槟闶窃谖易⑨尩哪堑胤匠霈F(xiàn)的異常,所以下邊的不會(huì)執(zhí)行而是立即跳到catch,如果注釋下就好了。