捕獲和拋出例外
例外處理的五大關鍵字:try,catch,finally,throw,throws
目錄- 捕獲和拋出例外
- 1.捕獲例外
- 2.拋出例外
- throw與throws
- 3.兩種處理方式的區別
- 4.自定義例外
- 如何自定義例外:
- 自定義例外在實際應用中的經驗總結
1.捕獲例外
用法:
? try{可能會出現例外的代碼
? } catch(Exception e)//catch后面跟想要捕獲的例外型別
? {例外的處理邏輯}
idea快捷鍵:ctrl+alt+t
eclipse快捷鍵alt+shift+z
代碼示例:
public class Test1 {
public static void main(String[] args) {
int a=1;
int b=0;
try {
//快捷鍵ctrl+ait+t選擇try
System.out.println(a/b);
} catch (ArithmeticException e) {
System.out.println("算術例外");;
} finally {
System.out.println("無論程式是否捕獲到例外都會被執行");
}
}
}
輸出:
算術例外
無論程式是否捕獲到例外都會被執行
2.拋出例外
? 通過throws關鍵字宣告拋出這個例外,交給方法的呼叫者去處理,在這里main方法的呼叫者是JVM,即交給JVM去處理,
throw與throws
throws: 跟在方法宣告后面,后面跟的是例外類名
throw: 用在方法體內,后面跟的是例外類物件名
throws: throws表示有出現例外的可能性,并不一定出現這些例外
throw: throw則是拋出了例外,執行throw一定出現了某種例外
throws: 表示拋出例外,由該方法的呼叫者來處理
throw: 表示拋出例外,由該方法體內的陳述句來處理
throws:后面可以跟多個例外,用逗號(,)隔開
throw:只能拋出一個例外物件名
代碼示例:
public class Demo02 {
//throws后面可以跟多個例外,用逗號(,)隔開
public static void main(String[] args) throws Exception {
Demo02 d=new Demo02();
d.division(5.0,0.0);
}
public void division(double x,double y) throws ArithmeticException{//throws后面跟例外類
double num=x/y;
if (y==0) {
throw new ArithmeticException("算術例外");//后面跟例外物件名
} else {
System.out.println(num);
}
}
}
輸出:
Exception in thread "main" java.lang.ArithmeticException: 算術例外
at com.exception.Demo02.division(Demo02.java:11)
at com.exception.Demo02.main(Demo02.java:6)
可以看到當if成立時,會拋出例外,也就是throw才會執行,而當沒例外的時候則不會執行!
3.兩種處理方式的區別
- 拋出例外:如果程式出現了例外,沒有辦法將具體的例外列印出來,不做任何處理;程式中斷,
- 捕獲例外:如果程式出現了例外,就能夠詳細的列印是什么原因導致了例外并且能夠做出相應的處理,能夠顯示詳細的日志,程式不中斷,
4.自定義例外
在java中除了,java中給我們定義的例外之外,我們還可以自定義例外,
如何自定義例外:
在進行程式開發的程序中,自定義例外遵循以下四個步驟:
1.首先創建自定義例外類,語法格式:自定義例外類名 extends Exception,
2.在方法中通過關鍵字throw拋出例外物件,
3.若是在當前拋出例外的方法中處理例外,可以用try-catch陳述句捕獲并處理;若不是,在方法的宣告處通過關鍵字throws指明要拋出給方法呼叫的例外,
4.在出現例外方法的呼叫中捕獲并理例外,
eg:定義一個大于10就會從拋出的例外
//自定義例外類
public class CustomizeException extends Exception{
private int a;
public CustomizeException(int a) {
this.a = a;
}
//toString:例外的列印資訊
@Override
public String toString() {
return "CustomizeException{"+a+'}';
}
}
然后書寫一個測驗類,里面放可能會存在例外的方法
package com.exception;
public class TestCustomizeException {
//定義一個可能會存在例外的方法
static void test(int a) throws CustomizeException {
System.out.println("傳遞的引數為"+a);
if (a>10){
throw new CustomizeException(a);
}
System.out.println("ok");
}
public static void main(String[] args) {
try {
test(11);
} catch (CustomizeException e) {
System.out.println("CustomizeException=>"+e);;
}
}
}
輸出:
傳遞的引數為11
CustomizeException=>CustomizeException{11}
這就是自定義例外
自定義例外在實際應用中的經驗總結
- 在處理運行時例外的時候,采用邏輯去合理規避同同時輔助try-catch處理
- 在多重catch塊后面,可以加一個catch(Exception)來處理可能會被遺漏的例外
- 對于不確定的代碼,也可以加上try-catch處理潛在的例外
- 盡量去處理例外,而不是只呼叫PrintStackTrace()去列印輸出
- 具體如何處理例外,要根據不同的業務需求和例外型別去決定
- 盡量添加finally陳述句塊去釋放占用的資源
本文來自博客園,作者:星余明,轉載請注明原文鏈接:https://www.cnblogs.com/lingstar/p/16482435.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/499409.html
標籤:Java
