一、概述:例外就是程式出現了不正常的情況
二、例外體系
Throwable包含Error、Exception;Exception包含(RuntimeException、非RuntimeException)
Error:嚴重問題,無需處理
Exception:稱為例外類,它表示程式本身可以處理的問題
RuntimeException:在編譯期不檢查的,出了問題后,需要我們回來修改代碼
非RuntimeException:編譯期就必須處理的,否則程式不能通過編譯,就更不能正常運行了
三、JVM的默認處理方案
如果程式出現了問題,而我們并沒有做任何處理的時候,JVM會做默認的處理
1.把例外的名稱、例外原因和例外出現的位置等資訊輸出在了控制臺
2.程式停止執行
四、例外處理
1.try...catch
格式:
try{
可能出現例外的代碼;
}catch(例外類名 變數名){
例外的處理代碼;
}
流程:
1.程式先從try里面的代碼開始執行
2.出現例外,會自動生成一個例外類物件,該例外類物件將被提交給Java運行時的系統
3.當Java運行時系統收到例外物件時,回到catch中去找匹配的例外類,找到后進行例外處理
4.執行完畢后,程式還可以繼續向下執行
public class ExceptionDemo {
public static void main(String[] args) {
System.out.println("開始");
method();
System.out.println("結束");
?
}
?
public static void method() {
try {
int[] arr = {1, 2, 3};
System.out.println(arr[3]);//ArrayIndexOutOfBoundsException
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("索引越界");
//e.printStackTrace();
}
}
}
?
引伸Throwable的成員方法
| 方法名 | 說明 |
|---|---|
| public static getMessage() | 回傳此Throwable的詳細訊息字串 |
| public String toString() | 回傳此可拋出的簡短描述 |
| public void printStackTrace() | 把例外資訊輸出在控制臺 |
引伸編譯時例外和運行時例外的區別
Java中的例外被分為兩大類:編譯時例外和運行時例外,也被稱為受檢例外和非受檢例外
所有的RuntimeException類及其子類被稱為運行時例外,其他例外都是編譯時例外
編譯時例外:必須顯示處理,否則程式會發生錯誤,無法通過編譯(編譯時例外是說有可能出現例外不是一定會有例外)
public static void method1(){
try {
String s="2022-03-23";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy--MM-dd");//日期格式不匹配,無法通過編譯拋出例外
Date d = sdf.parse(s);
System.out.println(d);
}catch (ParseException e){
e.printStackTrace();
}
運行時例外:無需顯示處理,也可以和編譯時例外一樣處理
2.例外處理之throws
格式: throws 例外類名;//要跟在方法的括號后面
總結:
編譯時例外必須進行處理,兩種方案:try..catch 或throws,如果采用throws,那么將來誰呼叫誰再進行try..catch處理
運行時例外可以不處理,出現問題后需要我們回來修改代碼
五、自定義例外
格式:
public class 自定義例外類 extends Exception {
無參構造;
帶參構造;
}
throw與hrows的區別
throw:用在方法內,跟的是例外物件名;表示拋出例外,由方法內的陳述句處理;執行throw一定拋出了某種例外
throws:用在
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/448133.html
標籤:其他
