java異常的捕獲及處理
異常的捕獲及處理
1.try……catch……
2.throws
3.throw
4.assert 斷言
First、什麼是異常?
異常是導致一個程式中斷的指令流,一旦出現之後程式就將立即退出。
public class ExpTest{
public static void main(String args[]){
int x = 10;
int y = 0;
System.out.println("計算開始。") ;
System.out.println("計算結果是:"+(x/y));
System.out .println("計算結束。");
}
}
程式的執行結果:
/*計算開始。
*Exception in thread "main" *java.lang.ArithmeticException: / by zero
*at ExpDemo01.main(ExpDemo01.java:6)
*/
產生了異常之後,在異常語句之後的程式碼將不再執行,直接退出程式。
要是程式繼續進行,就需要異常語句的處理了。
Second、處理異常?
在Java中使用如下的語法進行異常的處理:
一個 try 語句之後跟上了多個 catch 語句,表示可以處理多種異常。
捕獲範圍小的異常要放在捕獲範圍大的異常之前。
大部分的異常都直接使用Exception接收即可。
try{
可能出現異常的語句;
}catch(異常型別 異常物件){
處理異常;
}catch(異常型別 異常物件){
處理異常;
}...
finally{
異常處理的統一出口;
//不管是否有異常,都執行此finally語句!
}
以算術異常為例,觀察其繼承的結構:
java.lang.Object
java.lang.Throwable
java.lang.Exception【程式中】
java.lang .RuntimeException【控制檯丟擲異常console】
java.lang.ArithmeticException
Throwable有兩個子類:
Throwable:
Error:表示"JVM錯誤",還沒有執行到程式上,所以一般不去處理。
Exception:是在"程式中"發生的異常,一般都需要進行處理。
//肯定所有的異常類的操作都可以通過Exception進行接收。
Third、異常的處理流程
a、
異常產生之後,實際上都會自動生成一個異常類的【例項化物件】,如果此時編寫了異常處理語句的話,則進行異常的處理,如果沒有的話,則交給 JVM 進行處理。
b、
使用了 try 捕獲異常之後,將自動與 catch 中的異常型別相匹配,如果匹配成功,則表示可以使用此 catch處理異常,如果都沒有匹配成功的,則不能處理。
c、
程式中不管是否出現了異常,如果存在了 finally語句,都要執行此語句的程式碼。
4、throws
throws關鍵字主要是用在方法的宣告上,表示一個方法不處理異常,而交給被呼叫處進行處理。
在主方法上使用的話就表示一旦出現了異常之後,繼續向上拋,表示由JVM進行處理了。
實際上預設情況下的所有異常都是依靠JVM進行處理的。
4、throw(少一個s)
throw關鍵字是在程式中"人為的丟擲"一個異常物件。
throw new Exception("認為丟擲的!") ;
用一個程式去證明。
public class ExpTest01{
public static void main(String args[]) {
try{
throw new Exception("認為丟擲的!") ;
}catch(Exception e){
e.printStackTrace() ;
}
}
}
5、RuntimeException和Exception
1、RuntimeException:
- 丟擲的異常是RuntimeException類或者是它的子類的話,那麼可以不用進行異常處理的操作。
- 如果不做任何異常處理的話,則一旦出現了異常之後將交給被呼叫處進行處理。
2、兩者的區別:
Exception必須處理,而RuntimeException可以不用處理。
6、異常處理的標準格式。
try…catch…finally、throw、throws實際上在開發中是要一起使用。
- throw直接丟擲異常,無需自己處理,有程式以外的程式碼處理,至於什麼異常開發者也不會知道,如果沒有程式碼處理丟擲的異常,程式將自動結束。throw是用在方法體內,丟擲後由程式外的程式碼處理。throw 則是丟擲了一些具體的異常——一些已知的異常,執行throw程式碼就是丟擲異常。
- try catch可以捕獲丟擲的異常,並顯示出來,開發者可以很明顯的瞭解自己程式碼的異常。
- throws是用在異常說明之後,若存在異常,將由方法的呼叫者執行;
throws可能存在異常需要丟擲,強調可能。
7、assert關鍵字(斷言)
一般assert都在程式中判斷某條語句一定是期望的計算結果。