try-catch-finally異常處理(一)
阿新 • • 發佈:2019-01-06
java異常處理的方式有兩種
1.捕捉異常
2.轉移異常
這裡先說捕捉異常(對於一個系統而言,異常處理是非常關鍵的,處理得好能夠避免和減少系統bug,同時也能夠非常好的定位問題來源)
捕捉異常都是通過try-catch-finally結構處理,一般有兩種格式
如下所示:
//結構2 try { //可能會產生異常的語句 } catch (Exception e) { //捕捉到異常後的處理語句 } //結構2 try { //可能會產生異常的語句 } catch (Exception e) { //捕捉到異常後的處理語句 } finally { }
注意:catch和finally不一定同時存在。但是try必須與兩者之一共同存在,也就是說結構可以是try-catch和try-finally
寫一個簡單的異常捕捉例子
public class ExceptionTest { public static void main(String[] args) { try { //被除數不能為0,程式丟擲異常 int i = 0, j = 1; int k = j / i; } catch (Exception e) { System.out.println("已捕捉到異常"); e.printStackTrace(); } } }
如上i分母不能為0,所以try程式中的語句就會丟擲異常,然後catch捕捉到異常並執行catch中的語句
執行結果如下:
已捕捉到異常
java.lang.ArithmeticException: / by zero
at ExceptionTest.main(ExceptionTest.java:7)
那到底什麼時候catch會執行什麼時候不會執行呢?以及finally什麼時候會執行?
其實catch中的語句如果在捕捉到異常的情況下都會執行,當try語句塊中丟擲異常,該異常實力物件就會依次匹配在各個catch語句塊中的型別Exception1、Exception2、Exception3.....。一旦匹配上就會進入相應的catch語句塊並執行。此時則為異常被catch語句塊捕捉到
而finally語句塊一般總是會被執行,無論是否產生了異常程式都會執行。如果執行到try或者是catch語句塊中的return語句,則先執行finally語句塊
如下:
public class ExceptionTest {
public static void main(String[] args) {
try {
// 丟擲(throw)異常
System.out.println("執行try語句塊,丟擲異常");
throw new Error();
} catch (Exception e) {
System.out.println("執行catch語句塊,已捕捉到Exception異常");
e.printStackTrace();
} catch (Error e) {
System.out.println("執行catch語句塊,已捕捉到Error錯誤");
e.printStackTrace();
} finally {
System.out.println("執行finally語句塊");
}
}
}
執行結果:
執行try語句塊,丟擲異常
java.lang.Error
at ExceptionTest.main(ExceptionTest.java:8)
執行catch語句塊,已捕捉到Error錯誤
執行finally語句塊
當然當try中不做任何操作,finally也會執行。