9、java中的异常处理机制
????? Java中的異常(Throwable)分為兩類(lèi):異常Execption和錯(cuò)誤Error。
????? Error,也就是錯(cuò)誤,這個(gè)是不可避免的,出現(xiàn)的問(wèn)題使得應(yīng)用停止,例如:服務(wù)器損壞、內(nèi)存溢出等。在java中所有的錯(cuò)誤都繼承自Error類(lèi),這個(gè)是不可控的。
????? Exection,也就是異常,是可控的,異常又分為編譯時(shí)異常和運(yùn)行時(shí)異常,編譯時(shí)異常是由編碼語(yǔ)法錯(cuò)誤導(dǎo)致的,在編譯時(shí)期就可以看出來(lái),即使進(jìn)行修改。代碼如下:
public class ErrorTest {public static void main(String[] args) {String s = 5;//這樣就會(huì)直接報(bào)錯(cuò),開(kāi)發(fā)者可以直接看到} }運(yùn)行時(shí)異常是由業(yè)務(wù)邏輯導(dǎo)致的,只有到了運(yùn)行時(shí)才可以看出來(lái)。代碼如下:
public class ErrorTest {public static void main(String[] args) {int i = 5;int j = 4;add(i, j);//5+4=1System.out.println(i / 0);//這里違反了除法的基本邏輯,運(yùn)行時(shí)也會(huì)報(bào)錯(cuò)}public static void add(int i , int j) {//這里就是編譯時(shí)異常,有邏輯不清造成System.out.println("i+j="+(i - j));} }?????? 因?yàn)楫?dāng)程序出現(xiàn)異常時(shí)便不再繼續(xù)往下執(zhí)行代碼,所以異常需要處理,這里的異常值得是Exection,如果程序發(fā)生Error,應(yīng)用會(huì)直接停止,而不是不繼續(xù)往下執(zhí)行代碼,錯(cuò)誤是控制不了的,只能重啟應(yīng)用,所以錯(cuò)誤一定要避免。Java中解決異常的方式有拋出異常和捕獲處理異常。所謂拋出異常就是指當(dāng)程序遇到異常時(shí),不去處理異常,而是將異常拋出去,保證程序能繼續(xù)往下執(zhí)行,捕獲異常則是指程序遇到異常時(shí),將異常的錯(cuò)誤信息進(jìn)行處理,保證程序繼續(xù)執(zhí)行,代碼如下:
/*** 異常的處理方式有兩種:* 一是使用throws或者throw:只是將錯(cuò)誤拋出,不做任何處理* 可以在代碼中主動(dòng)拋出錯(cuò)誤,使用thorw關(guān)鍵字,格式為throw new Exception();* 可以在方法上、類(lèi)上拋出錯(cuò)誤,使用thorws關(guān)鍵字,格式throws Exception* 而是使用try..catch..finally:捕獲錯(cuò)誤,處理錯(cuò)誤* 格式如下:* try{* 可能發(fā)生錯(cuò)誤的代碼;* }catch(異常類(lèi)){* 拋出異常信息;//可以有多個(gè)catch塊* }finally{* finally中的代碼不管怎么樣都會(huì)執(zhí)行;* }* @author chaizepeng**/ public class ErrorTest {public static void main(String[] args) {int i = 5;int j = 0;//add方法拋出了異常,在這里捕獲異常并作處理try {add(i,j);} catch (ArithmeticException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}finally {System.out.println("做一下容災(zāi)處理。。。");}}//在這里不處理錯(cuò)誤,將錯(cuò)誤拋出,誰(shuí)調(diào)用這個(gè)方法,出錯(cuò)的時(shí)候再做處理public static void add(int i , int j) throws Exception{System.out.println(i/j);throw new Exception();} }????? 開(kāi)發(fā)者可以自定義異常,就是繼承自Execption類(lèi),然后自定義異常即可,代碼如下:
public class NoZeroExection extends Exception{//繼承自Exception類(lèi)public NoZeroExection() {//用構(gòu)造方法來(lái)描述錯(cuò)誤信息System.out.println("不可出現(xiàn)數(shù)字0");}}class Test{public static void main(String[] args) {int flag = 0;try {//捕獲異常myExcetion(flag);} catch (NoZeroExection e) {System.out.println("出現(xiàn)錯(cuò)誤:");e.printStackTrace();}}public static void myExcetion(int flag) throws NoZeroExection{//拋出異常if (flag == 0) {throw new NoZeroExection();}System.out.println("正常執(zhí)行。。。");} }常見(jiàn)的異常:
| 空指針異常 | NullpoiontException |
| 數(shù)組下標(biāo)越界 | ArrayIndexOutOfBoundsException |
| 參數(shù)錯(cuò)誤 | ArithmeticException |
| IO異常 | IOException |
| 類(lèi)不存在異常 | ClassNotFoundException |
| 方法不存在異常 | NoSuchMethodException |
| sql異常 | SQLException |
| 。。。。 | ? |
?
?
總結(jié)
以上是生活随笔為你收集整理的9、java中的异常处理机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 地龙养殖技巧 地龙如何养殖
- 下一篇: 王志文演过的电视剧 王志文演过的电视剧有