1. 程式人生 > >一大波Java來襲(二)異常處理

一大波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~