Java中的異常機(jī)制:
Throwable類是 Java 語(yǔ)言中所有錯(cuò)誤或異常的超類。主要包括兩個(gè)子類: Error和Exception.
一般中要處理的異常是Exception.
Java中最常見(jiàn)的處理方式是try catch finally.格式為:
try
{
需要被檢測(cè)的異常.
}
catch(異常類 變量)
{
處理異常的代碼()處理方式
}
finally
{
一定會(huì)被執(zhí)行的代碼語(yǔ)句
}
一個(gè)簡(jiǎn)單的異常處理代碼及有關(guān)函數(shù)的應(yīng)用:
1 /* 2 異常:Exception. 3 處理異常的方式: 4 try 5 { 6 需要被檢測(cè)的代碼. 7 } 8 catch(異常類 變量) 9 {10 處理異常的代碼,處理方式.11 12 }13 finally14 {15 一定會(huì)被執(zhí)行的語(yǔ)句.16 }17 */18 class ExceptionDemo19 {20 public static void main(String args [])21 {22 Demo d = new Demo();23 //int a = d.div(4,1);24 try25 {26 int a = d.div(4,0);27 System.out.用try catch finally也處理捕捉多個(gè)異常,在聲明異常時(shí),應(yīng)該聲明更具體的異常.
當(dāng)出現(xiàn)了多個(gè)catch時(shí),聲明了多個(gè)異常時(shí),父類異常塊應(yīng)該放在代碼的最下面,如果放在最上面會(huì)導(dǎo)致子類異常永遠(yuǎn)無(wú)法執(zhí)行到.
異常的聲明:用關(guān)鍵字 throws.在java中可以用throws和throws來(lái)拋出異常.
throw和throws的區(qū)別在于:
throws:使用在函數(shù)上(所謂函數(shù)上就是在函數(shù)名的小括號(hào)與大括號(hào)之間),后面跟異常類,可以有多個(gè)異常類,用","(逗號(hào))隔開(kāi)即可.
throw:使用在函數(shù)內(nèi)(在大括號(hào)之內(nèi)),后面跟的是異常對(duì)象,格式例如: throw new 異常類名();
在實(shí)際應(yīng)用中,可以自定義異常,自定義異常需要繼承一個(gè)異常類,可以是Error類,Exception類,或者它們的根類:Throwable類.
格式:(例如聲明一個(gè)自定義的Exception異常類)
class 自定義異常類名(一般寫(xiě)成xxxException) extends Exception
{
xxxException(String message)
{
super(message);
}
}
上面的自定義異常類,因?yàn)閖ava已經(jīng)在父類中已經(jīng)把異常類的信息都完成了,子類異常類在構(gòu)造時(shí),
將異常的信息傳遞給父類,通過(guò)super語(yǔ)句,就可以直接調(diào)用getMessage()獲取異常信息.(有關(guān)父類的方法可以查閱Java API)
自定義異常類只能手動(dòng)拋出,是無(wú)法自動(dòng)拋出的.
相關(guān)的例子代碼:
1 class ExceptionDemo2 2 { 3 public static void main(String args []) 4 { 5 Demo d = new Demo(); 6 try 7 { 8 int a = d.div(4,-9); 9 System.out.println("a = "+a);10 }11 catch(FuShuException e) 12 {13 System.out.println(e.toString());14 //System.out.println("出現(xiàn)了負(fù)數(shù).");15 System.out.println("錯(cuò)誤的負(fù)數(shù)是:"+e.getValue());16 } 17 System.out.println("It's over.");18 19 }20 }21 22 class FuShuException extends Exception23 {24 private int value;25 /*26 private String msg;27 FuShuException(String msg)28 {29 this.msg = msg;30 }31 public String getMessage()32 {33 return msg;34 }35 */36 FuShuException(String msg,int value)37 {38 super(msg);39 this.value = value;40 }41 42 public int getValue()43 {44 return value;45 }46 }47 48 class Demo49 {50 int div(int a,int b)throws FuShuException //throws 使用在函數(shù)上.51 {52 if(b<0)53 throw new FuShuException("出現(xiàn)了除數(shù)是負(fù)數(shù)的情況",b); //throw 使用在函數(shù)內(nèi).54 return a/b;55 } }Java中有一種特別的異常類:RuntimeException
1.該異常如果在函數(shù)內(nèi)拋出了,在函數(shù)上不聲明,編譯也是可以通過(guò)的,(其他Exception等類是在函數(shù)內(nèi)拋出了必須在函數(shù)上聲明的)
2.如果在函數(shù)上聲明了該類異常,調(diào)用者可以不進(jìn)行處理.
因此使用自定義異常的時(shí)候,如果該異常的發(fā)生,無(wú)法繼續(xù)進(jìn)行運(yùn)算,那么就可以讓該自定義異常繼承RuntimeException.
最后是一個(gè)異常的相關(guān)練習(xí)代碼:
1 class BlueScreen extends Exception 2 { 3 BlueScreen(String message) 4 { 5 super(message); 6 } 7 } 8 class Smoke extends Exception 9 {10 Smoke(String message)11 {12 super(message);13 }14 }15 16 class NoPlanException extends Exception17 {18 NoPlanException(String message)19 {20 super(message);21 }22 }23 24 class Computer25 {26 private int state = 3;27 28 public void run()throws BlueScreen,Smoke29 {30 if(state==2)31 throw new BlueScreen("電腦藍(lán)屏了");32 if(state==3)33 throw new Smoke("電腦冒煙了");34 System.out.println("電腦運(yùn)行");35 }36 public void reset()37 {38 state = 1;39 System.out.println("電腦重啟");40 } 41 }42 43 class Teacher44 {45 private String name;46 private Computer comp;47 Teacher(String name)48 {49 this.name = name;50 comp = new Computer();51 }52 public void prelect()throws NoPlanException53 {54 try55 {56 comp.run();57 }58 catch(BlueScreen e)59 {60 test();61 comp.reset();62 }63 catch(Smoke e)64 {65 throw new NoPlanException("課時(shí)無(wú)法繼續(xù)."+e.getMessage());66 }67 System.out.println("老師講課");68 }69 public void test()70 {71 System.out.println("練習(xí)");72 }73 }74 75 76 class ExceptionTest77 {78 public static void main(String args[])79 {80 Teacher t = new Teacher("張老師");81 try82 {83 t.prelect();84 }85 catch(NoPlanException e)86 {87 System.out.println(e.toString());88 System.out.println("換老師或者電腦,不行就放假.");89 }90 }91 }
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注