異常的捕獲及處理
知識點:
1.異常的產生以及對於程式的影響;
2.異常處理的格式;
3.異常的處理流程;
4.Throw,throws關鍵字的使用;
5.異常處理的使用標準;
6.自定義異常.
異常的描述:
異常是導致程式終端的一種指令劉,如果異常沒有進行合理處理的話,會導致程式終端執 行
一旦出現異常,產生異常以後的語句不再執行
異常處理可以使程式即使出現了異常,也可以讓程式正常的執行完畢
處理異常格式:
Java提供了三個關鍵字 try catch finally
try{
//有異常的程式碼
}catch(異常型別 物件){
//異常處理
}catch(異常型別 物件){
//異常處理
}catch(異常型別 物件){
//異常處理
}finally{
//不管是否出現異常,都執行的統一程式碼
}
對於以上的操作組合:try…catch,try…catch…finally,try…finally(不建議使用)
使用異常處理,即使程式中出現了異常,也可以正常執行
出現異常的目的是解決異常,所以為了能夠進行異常的處理,可以使用異常類中提供的printStackTrace()方法進行異常資訊的輸出.
異常處理範例:
public class Test{
public static void main(String[] args) {
System.out.println(“算術運算開始”);
try{
System.out.println(10/0);
}catch(Exception e){
e.printStackTrace();
}finally{
System.out.println(“不管是否有異常我都會執行”);
}
System.out.println(“算術運算結束”);
}
}
異常處理流程(核心,帶面試題)
以java.lang.ArithmeticException為例檢視繼承架構:
java.lang.ArithmeticException
所有的異常類都是Throwable的子類,Throwable下有兩個子類
面試題:請解釋Error和Exception的區別?
Error:指的是JVM錯誤,即:此時的程式沒有執行,使用者不能執行
Exception:指的程式執行中產生的異常,使用者可以處理
也就是說所謂的異常處理指的是所有的Exception以及它的子類異常
面試題:請解釋java中的異常處理流程
1.當程式在執行過程中出現了異常後,那麼會由jvm自動根據異常的型別例項化一個與之匹配的異常類物件;
2.產生了異常物件之後,會判斷當前的語句上是否存在有異常處理,如果沒有異常處理,那麼就交給JVM進行預設的異常處理,處理的方式:輸出異常資訊.而後結束程式的執行;
3.如果此時存在有異常的捕獲操作,那麼會由try語句來捕獲產生的異常類例項化物件,而後與try以後的每一個catch語句進行比較,如果有符合的catch捕獲型別,則使用當前的catch語句來進行異常的處理,如果不符合就繼續向下匹配後面的catch;
4.不管最後異常處理是否能夠匹配,那麼都要向後執行,如果此時程式中存在有finally語句,如果有,就先執行finally語句,但是執行完畢後需要根據之前的catch匹配結果來決定如何執行,如果之前有匹配到catch語句,那麼就繼續執行finally之後的程式碼,如果之前沒有匹配到相應的catch語句.那麼就將此異常交給jvm處理,輸出異常資訊,結束程式執行
整個過程就好比方法過載一樣,catch就好比方法名,根據catch後的引數進行型別匹配,但是所有java物件都存在有自動的向上轉型的操作支援,如果說真的要匹配型別,簡單的做法就是匹配Exception就夠了
兩點說明:
1.在編寫多個catch捕獲異常的時候,捕獲範圍大的異常一定要放在捕獲異常範圍小的後,否則程式編譯報錯
2.雖然直接捕獲Exception比較方便,但是這樣也不好,因為所有的異常都會按照同樣一種方式進行處理;一些要求嚴格的專案裡面,異常一定要分開處理.
throws關鍵字
throws關鍵字主要用於方法宣告上,指的是當方法之中出現異常後交由被呼叫處處理
也就說呼叫了具有throws宣告的方法之後,不管操作是否出現異常,都必須使用try…catch來進行異常處理
在主方法上如果繼續丟擲異常,那麼這個異常就交給JVM進行處理,也就是採用預設的處理方式,輸出異常資訊,而後結束程式呼叫
主方法上不要加上throws,因為程式如果出錯了,也希望能夠正常執行.
throw關鍵字
在程式中可以使用throw手動丟擲異常
面試題:請解釋throw和throws的區別
throw:指的是在方法之中人為丟擲一個異常類物件(這個異常類物件可能是自己例項化,或者丟擲已經存在的)
throws:在方法的宣告上使用,表示此方法在呼叫時必須處理異常,可以宣告多個
RuntimeException類 執行時異常
這種異常類的最大特徵在於:程式在編譯的時候不會強制性的要求使用者處理異常,使用者可以根據自己的需要選擇性的處理異常,如果使用者沒有處理,產生異常了,將交給JVA處理,也就是說RuntimeException的子異常類.使用者可以根據情況處理
面試題:請解釋Exceprion與RuntimeException的區別?請列舉出幾個你常見的RuntimeException
1.Exception是RuntimeException的父類;
2.使用過Exception定義的異常必須要被處理,而RuntimeException的異常可以選擇性處理;
常見的RuntimeException:ArithmeticException,NullPointerException, ClassCastException
自定義異常
自定義異常類可以繼承Exception(強制處理異常)或者RuntimeException(選擇性處理異常
class AddException extends Exception{
public AddException(String msg){
super(msg);
}
})
相關文章
- 異常處理機制(二)之異常處理與捕獲
- 異常及捕獲
- Mysql系列第十九講 異常捕獲及處理詳解MySql
- IOS系統閃退異常(Crash)捕獲處理iOS
- 如何處理 Node.js 中出現的未捕獲異常?Node.js
- 前端JavaScript 常見的報錯及異常捕獲前端JavaScript
- 捕獲 React 異常React
- python異常捕獲Python
- Task異常捕獲的方式
- android 異常捕獲-UncaughtExceptionHandlerAndroidException
- restframework 異常處理及自定義異常RESTFramework
- Auth 授權的異常捕獲
- bug及異常處理1
- python中如何捕獲異常Python
- pb呼叫ole異常捕獲
- 記錄Javascript 異常捕獲JavaScript
- wpf 捕獲全域性異常
- SpringBoot之全域性捕獲異常Spring Boot
- 10. 異常捕獲、生成式
- JS 使用try catch捕獲異常JS
- 異常的處理
- springboot統一異常處理及返回資料的處理Spring Boot
- 異常-throws的方式處理異常
- 儲存過程——異常捕獲&列印異常資訊儲存過程
- 異常篇——異常處理
- 異常處理
- DRF之異常捕獲原始碼分析原始碼
- 捕獲不到異常嘗試除以0
- 在 C++ 中捕獲 Python 異常C++Python
- spring-boot 統一異常捕獲Springboot
- Java捕獲非檢查異常----UncaughtExceptionHandler的使用JavaException
- 【求助】如何捕獲 pytest parametrize 中的 timeout 異常
- 前端開發中的Error以及異常捕獲前端Error
- 漏洞分析——變數缺陷漏洞及通用異常捕獲宣告缺陷漏洞變數
- JSP 異常處理如何處理?JS
- 談談前端異常捕獲與上報前端
- React 異常處理React
- JS異常處理JS
- oracle異常處理Oracle