異常就是在程序的運行過程中所發生的不正常的事件, 它會中斷正在運行的程序,面對異常該怎么辦呢?通常情況下, 我們會這樣處理:
Java編程語言使用異常處理機制為程序提供了錯誤處理的能力異常處理機制拋抓模型
運行的代碼先拋出異常: 放在try{}塊中
然后捕獲抓取異常: catch(異常類型 異常對象)
最后再進行異常處理: catch{}塊中進行處理
Java中如何進行異常處理
Java的異常處理是通過5個關鍵字來實現的:
try執行可能產生、 catch捕獲異常、 finally無論是否發生異常,代碼總能執行、 throw手動/顯式、 throws拋出異常
示例:
public void method(){
try {
// 代碼段 1
// 產生異常的代碼段 2
// 代碼段 3
} catch (異常類型 ex) {
// 對異常進行處理的代碼段4
}//
代碼段5
}finally{
//無論是否有異常都會執行的代碼段6
}
try-catch異常處理流程
異常是一種特殊的對象, 類型為java.lang.Exception或其子類發生異常printStackTrace的堆棧跟蹤功能顯示出程序運行到當前類的執行流程
java.util.InputMismatchException //異常類型
at java.util.Scanner.throwFor(Scanner.java:840) //異常堆棧信息
at java.util.Scanner.next(Scanner.java:1461) //在此方法中拋出了異常
at java.util.Scanner.nextInt(Scanner.java:2091)
at java.util.Scanner.nextInt(Scanner.java:2050)
at cn.jbit.exception.Test3.main(Test3.java:15)// 出現異常的位置
在catch塊中處理異常,可以加入用戶自定義處理信息,通過調用異常對象的方法輸出異常信息:
e.printStackTrace();
System.err.println("出現錯誤: 被除數和除數必須是整數," + "除數不能為零。 ");
void printStackTrace()輸出異常的堆棧信息
String getMessage()返回異常信息描述字符串,是printStackTrace()輸出信息的一部分
方 法 名 | 說 明 |
Exception | 異常層次結構的根類 |
ArithmeticException | 算術錯誤情形, 如以零作除數 |
ArrayIndexOutOfBoundsE xception |
數組下標越界 |
NullPointerException | 嘗試訪問 null 對象成員 |
ClassNotFoundException | 不能加載所需的類 |
InputMismatchException | 欲得到數據類型與實際輸入類型不匹配 |
IllegalArgumentException | 方法接收到非法參數 |
ClassCastException | 對象強制類型轉換出錯 |
NumberFormatException |
數字格式轉換異常, 如把"abc"轉換成 數字 |
在try-catch塊后加入finally塊, 可以確保無論是否發生異常, finally塊中的代碼總能被執行
注意: 如果代碼塊中加入了System.exit(1);
強制終止程序執行語句,finally塊不會執行
public class Test4 {
public static void main(String[] args) {
try {
Scanner in = new Scanner(System.in);
System.out.print("請輸入被除數:");
int num1 = in.nextInt();
System.out.print("請輸入除數:");
int num2 = in.nextInt();
System.out.println(String.format("%d / %d = %d",
num1, num2, num1/ num2));
} catch (Exception e) {
System.err.println(“出現錯誤: 被除數和除數必須是整數, "
+"除數不能為零。 ");
System.out.println(e.getMessage());
} finally {
System.out.println("感謝使用本程序! ");
}
}
}
程序中預先想好了對付異常的處理辦法,如果程序運行異常!則開始對異常進行處理,處理完畢,程序繼續運行,這就是java異常處理機制的原理,希望讀完該文章能對你有所幫助。