一、異常簡介 (一)定義: 運行期間出現的錯誤,而不是編譯時的語法錯誤 例如: 1、打開一個不存在的文件 2、網路連接中斷 3、數學類錯誤 4、操作數組越界等 (二)異常的繼承樹 (三)異常類的體繫結構 二、異常類的繼承關係 Object 類的直接子類Throwable描述了所有被虛擬機拋出的非正常 ...
一、異常簡介
(一)定義: 運行期間出現的錯誤,而不是編譯時的語法錯誤
例如: 1、打開一個不存在的文件
2、網路連接中斷
3、數學類錯誤
4、操作數組越界等
(二)異常的繼承樹
(三)異常類的體繫結構
二、異常類的繼承關係
Object 類的直接子類Throwable描述了所有被虛擬機拋出的非正常狀況
(一)異常類型
Error :是由硬體或其他引起,不用編寫代碼處理
Eexcept :需要編寫代碼去處理
非檢查性異常:
檢查性異常:
三、異常處理機制
(一)異常的處理過程
(二)Java 中可用於處理異常的兩種方式:
1、自行處理:可能引發異常的語句封入在 try 塊內,而處理異常的相應語句則封入在 catch 塊內。
2、迴避異常:在方法聲明中包含 throws 子句,通知潛在調用者,如果發生了異常,必須由調用者處理。
try…catch
1、catch塊,是用來捕獲並處理try塊拋出的異常的代碼塊。沒有try塊,catch塊不能單獨存在。我們可以有多個catch塊,以捕獲不同類型的異常
2、如果程式拋出多個不同類型的異常,我們需要多個catch()語句來處理。
3、和特殊異常類相關聯的catch()塊必須寫在和普通異常類相關聯的catch()之前。
4、try{…}和catch( ){…}之間不可以添加任何代碼
throws 語句
1、throws ClassNotFoundeException 異常拋出,誰調用誰處理
2、位置:函數參數列表的後面
3、throws關鍵字後面,可以跟多個異常,中間用逗號分割
4、throws關鍵字拋出的異常,由調用該函數的函數處理
throw 語句
1、throw語句用在方法體內,表示拋出異常,由方法體內的語句處理。不能單獨使用,要麼和try.. catch…一起使用,要麼和throws一起使用。
2、throw語句的操作數一定是Throwable類類型或Throwable子類類型的一個對象
3、thorw 後的代碼不執行,該方法停止
4、throw 後跟一個對象,throws可以處理多個對象
(三)finally 語句
1、finally語句放在try …catch語句後
2、fianlly語句中的代碼塊不管異常是否被捕獲總是要執行
3、通常在finally語句中可以進行資源的清除操作,如:關閉打開文件、關閉資料庫連接等
4、try代碼塊和catch代碼塊中使用了return語句退出當前方法或般若break跳出某個迴圈,相關的finally代碼塊都有執行。
5、當try或catch代碼塊中執行了System.exit(0)時,finally代碼塊中的內容不被執行
四、自定義異常類
如果Java提供的異常類型不能滿足程式設計的需要,我們可以定義自己的異常類型。
用戶自定義的異常類應為 Exception 類(或者Exception 類的子類)的子類
例如:
import java.util.Scanner; public class Test3 { public static void main(String[] args) { Scanner input = new Scanner(System.in); int i = input.nextInt(); pay(i); } //付錢的方法 public static void pay(int i){ int j = 20; if (i < j) { try { throw new noMoneyException(); } catch (noMoneyException e) { // TODO Auto-generated catch block System.out.println("想吃霸王餐?"); } }else{ System.out.println("老闆端來一碗羊雜面"); } } } class noMoneyException extends Exception{ }