一大波Java來襲(二)異常處理
概要解析:
本章的知識點可以記為:1圖+5關鍵字+先逮小的、後逮大的
一、基礎
(一)定義
1、異常
是指在程式執行的時候發生的一些異常事件。良好的程式設計應該在異常發生的時候提供處理異常的方法,使得程式不會因為異常的發生而中斷。因此Java提供的用於處理程式中錯誤的一種機制。
2、丟擲異常throw
java程式的執行過程中如出現異常事件,可以生成一個異常類物件(封裝了異常事件的資訊),被提交給java執行時系統。
簡單理解為:推卸責任。馬路上遇到了交通事故,不需要自己處理,而是撥打110,等待交警的處理。
3、捕獲異常catch
當java執行時系統接收到異常物件時,會尋找能處理這一異常的程式碼並把當前異常物件交給其處理
簡單理解為:承擔責任。廊坊市警察局,接到報警電話以後,確定出現交通事故的區域來自於安次區,因此通知安次區的交警出動。
二、分類
(一)Error錯誤
系統錯誤,不能被處理。由Java虛擬機器生成並丟擲,包括動態連結失敗,虛擬機器錯誤等,程式對其不做處理。
(二)Exception所有異常類的父類
其子類對應了各種各樣可能出現的異常事件,一般需要使用者顯示的宣告或捕獲。
1、Runtime Exception
執行時錯誤,可以處理也可以不處理。由系統自動檢測並將它們交給預設的異常處理程式。如被0除,陣列下標超範圍等,其產生比較頻繁,處理麻煩,如果顯式的宣告或捕獲將會對程式可讀性和執行效率影響很大。
2、非RuntimeException
只要不是執行時錯誤,必須手動處理的。
三、異常的捕獲和處理
(一)5個關鍵字
1、try語句
- try{}語句指定了一段程式碼,該程式碼就是一次捕獲並處理異常的範圍。
- 在執行過程中,該段程式碼可能會產生並丟擲一種或幾種型別的異常物件,它後面的catch語句要分別對這些異常做相應的處理。
- 如果沒有例外產生,所有的catch程式碼段都被略過不執行
簡單解析為:廊坊市按照街道對職權進行劃分,如果安次區發生了交通事故,那麼本區域的交警就出動;如果安次區有人需要急救,那麼負責本區域的120就出動;如果是鄰居之間出現了不和諧的關係,那麼居委會大媽就出動
2、catch語句
在catch語句塊中是對異常進行處理的程式碼,每個try語句塊可以伴隨一個或多個catch語句,用於處理可能產生的不同型別的異常物件。
簡單理解為:同樣都是安次區,可能會出現各種各樣的麻煩事,堵車了則交警出動;有人犯罪則本區域的刑警出動;街坊鄰居吵架則居委會出動。同樣都是這個區域,根據出現的問題的種類不同,則負責處理事情的人也會有所不同。
3、finally語句
- finally語句為異常處理提供一個統一的出口,使得在控制流程轉到程式的其他部分以前,能夠對程式的狀態作統一的管理。
- 無論try所指定的程式塊中是否丟擲異常,finally所指定的程式碼都要被執行。
- 通常在finally語句中可以進行資源的清除工作,如:關閉開啟的檔案,刪除臨時檔案等
簡單理解為:無論過程中出現了什麼問題,反正最終結果都是:和平處理。絕不錯殺一個好人,也不放過一個壞人。
(二)先逮小的、後逮大的
異常的處理過程是:先捕捉並處理小的錯誤,後捕捉並處理大的錯誤。Exception的權利是最大的。
簡單理解為:遇到問題後,首先要內部調解,調解不同的話,可以選擇地方政府打官司,然後地方政府說“我們職權範圍內,沒辦法處理這事情,你向省地政府上訴吧!”……一直到問題被解決為止。
(三)自定義的異常
步驟如下:
- 通過繼承java.lang.Exception類宣告自己的異常類
- 在方法適當的位置生成自定義異常的例項,並用throw語句丟擲
- 在方法的宣告部分用throws語句宣告該方法可能丟擲的異常。
注意: 重寫方法需要丟擲與原方法所丟擲異常型別一致異常,或者不丟擲異常。
四、例項
import java.io.*;
class MyException entends Exception{
private int id;
public MyException(String message,int id){
super(message);
this.id=id;
}
public int getId(){
return id;
}
}
public class Test{
public void regist(int num) throws MyException{
if(num<0){
throw new MyException("人數為負值,不合理!",3);
}
System.out.println("登記人數"+num);
}
public void manager(){
try {
regist(100);
} catch (MyException e) {
System.out.println(“登記失敗,出錯型別碼=”+e.getId());
e.printStackTrace();
}
System.out.print("操作結束");
}
public static void main(String[] args){
Test t=new Test();
t.manager;
}
}
五、總結
“異常”這一章的知識點可以概括為:一個圖、五個關鍵字、先逮小的後逮大的。
對映到人生即是:生活中並不是一帆風順,因此路途的過程中會遇到這樣活那樣的困難/挫折,家庭問題就要找本區的居委會來調解;如果是道路交通問題,撥打110,等待分配來的警察來處理;如果是路人病發,就要撥打120……因為人並不是萬能的,不能夠把所有的事情料理的一帆風順,因此我們需要別人的幫助。有問題,只需要“help”一聲丟擲,就會有專人來救助。如果別人解決不了的話,就繼續向上丟擲直到問題處理完為止。
“異常”,有問題就“拋”,會有專人解決的,不要讓自己太累哦O(∩_∩)O~