java異常捕獲與處理的方法:1、throws關鍵字,由系統自動將所捕獲的異常信息拋給上級調用方法;2、throw的作用是手工拋出異常類的實例化對象;3、RunException是Exception的子類,由使用者選擇是否進行處理。
【相關學習推薦:java基礎教學】
java異常捕捉與處理的方法:
一、異常處理的使用
由於finally區塊是可以省略的,異常處理格式可以分為三類:try{ }——catch { }、try{ }——catch{ }——finally{ }、try{ }——finally{ }。
1 public class DealException 2 { 3 public static void main(String args[]) 4 { 5 try 6 //要检查的程序语句 7 { 8 int a[] = new int[5]; 9 a[10] = 7;//出现异常 10 } 11 catch(ArrayIndexOutOfBoundsException ex) 12 //异常发生时的处理语句 13 { 14 System.out.println("超出数组范围!"); 15 } 16 finally 17 //这个代码块一定会被执行 18 { 19 System.out.println("*****"); 20 } 21 System.out.println("异常处理结束!"); 22 } 23 }
可以看出,在異常捕捉的過程中要進行兩個判斷,第一是try程式區塊是否有異常產生,第二是產生的異常是否和catch()括號內想要捕捉的異常相同。
那麼,如果出現的異常和catch()內想要捕捉的異常不相同時怎麼辦呢?事實上我們可以在一個try語句後面跟上多個異常處理catch語句,來處理多種不同類型的異常。
1 public class DealException 2 { 3 public static void main(String args[]) 4 { 5 try 6 //要检查的程序语句 7 { 8 int a[] = new int[5]; 9 a[0] = 3; 10 a[1] = 1; 11 //a[1] = 0;//除数为0异常 12 //a[10] = 7;//数组下标越界异常 13 int result = a[0]/a[1]; 14 System.out.println(result); 15 } 16 catch(ArrayIndexOutOfBoundsException ex) 17 //异常发生时的处理语句 18 { 19 System.out.println("数组越界异常"); 20 ex.printStackTrace();//显示异常的堆栈跟踪信息 21 } 22 catch(ArithmeticException ex) 23 { 24 System.out.println("算术运算异常"); 25 ex.printStackTrace(); 26 } 27 finally 28 //这个代码块一定会被执行 29 { 30 System.out.println("finally语句不论是否有异常都会被执行。"); 31 } 32 System.out.println("异常处理结束!"); 33 } 34 }
上述範例中ex.printStackTrace();就是對異常類別物件ex的使用,輸出了詳細的異常堆疊追蹤訊息,包括異常的類型,異常發生在哪個套件、哪個類別、哪個方法以及異常發生的行號。
二、throws關鍵字
throws宣告的方法表示該方法不處理異常,而由系統自動將所捕獲的異常訊息拋給上級呼叫方法。
1 public class throwsDemo 2 { 3 public static void main(String[] args) 4 { 5 int[] a = new int[5]; 6 try 7 { 8 setZero(a,10); 9 } 10 catch(ArrayIndexOutOfBoundsException ex) 11 { 12 System.out.println("数组越界错误!"); 13 System.out.println("异常:"+ex); 14 } 15 System.out.println("main()方法结束。"); 16 } 17 private static void setZero(int[] a,int index) throws ArrayIndexOutOfBoundsException 18 { 19 a[index] = 0; 20 } 21 }
throws關鍵字拋出異常,「ArrayIndexOutOfBoundsException」表明setZero()方法可能存在的異常類型,一旦方法出現異常,setZero()方法自己並不處理,而是將異常提交給它的上級呼叫者main()方法。
三、throw關鍵字
throw的作用是手工拋出異常類別的實例化物件。
1 public class throwDemo 2 { 3 public static void main(String[] args) 4 { 5 try 6 { 7 //抛出异常的实例化对象 8 throw new ArrayIndexOutOfBoundsException("\n个性化异常信息:\n数组下标越界"); 9 } 10 catch(ArrayIndexOutOfBoundsException ex) 11 { 12 System.out.println(ex); 13 } 14 } 15 }
我們能發現,throw好像屬於沒事找事,引發運行期異常,並自訂提示訊息。事實上,throw通常和throws合併使用,拋出的是程式中已經產生的例外類別實例。
ExceptionDemo
輸出結果:
setZero方法開始:
setZero方法結束。
異常:java.lang.ArrayIndexOutOfBoundsException: 10
main()方法結束!
四、RuntimeException類別
Exception和RuntimeException的差別:
Exception:強制性要求使用者必須處理;
RunException :是Exception的子類,由使用者選擇是否進行處理。
#五、自訂例外類別中
##1使用時使用父類別的大量的方法,也可自己編寫方法來處理特定的事件。 Java提供用繼承的方式運行使用者自己寫的異常類別。1 class MyException extends Exception 2 { 3 public MyException(String message) 4 { 5 super(message); 6 } 7 } 8 public class DefinedException 9 { 10 public static void main(String[] args) 11 { 12 try 13 { 14 throw new MyException("\n自定义异常类!"); 15 } 16 catch(MyException e) 17 { 18 System.out.println(e); 19 } 20 } 21 }
相關學習推薦:#
以上是java異常如何捕捉與處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!