Java基礎學習(七) – 異常處理
- 2019 年 10 月 12 日
- 筆記
1.異常概念
異常指的是程序在執行過程中出現的非正常的情況,導致JVM的非正常停止。在Java中,異常是一個類,產生異常就是創建異常對象並拋出一個異常對象。
異常指的並不是語法錯誤,語法錯誤,編譯不會通過,而是編譯通過後,程序執行異常。
異常的作用是幫助我們找到程序中的問題。
2.異常產生過程解析
public class TestException { public static void main(String[] args){ int[] arr = {1,2,3}; System.out.println(arr[3]); } }
運行過程解析:
- 在 arr 數組中提取索引 3,由於數組沒有索引3,導致了運行異常,JVM對這個異常做了識別,並拋出異常給 main 方法。
- 由於 main 方法並沒有異常處理,main 方法又把異常返回給 JVM。
- JVM 收到異常後,打印異常詳細信息到控制台,同時中斷程序。
3.異常類
java.lang.Throwable 是異常的根類。
Throwable 體系:
- java.lang.Error:嚴重錯誤,不在我們處理範圍內。
- java.lang.Exception:平時所說的異常是此類。我們可以通過修改代碼糾正錯誤,使程序能正常運行。異常又分為checked異常(編譯異常)和runtime異常(運行異常)。
Throwable 常用方法:
- public void printStackTrace():打印異常的詳細信息。
- public String getMessage():獲取異常發生的原因。
4.異常處理
Java 異常處理的五個關鍵字: try、catch、finally、throw、throws。
- throw 拋出異常。
- throws 聲明異常。
- try…catch…finally 捕獲異常。
throw:
public class TestException { public static void main(String[] args){ int[] arr = {1,2,3}; int index = 3; if (index < 0 || index > arr.length -1){ throw new ArrayIndexOutOfBoundsException("數組越界"); } System.out.println(arr[index]); } }
throws 用於方法聲明之上,表示當前方法不處理異常,並提醒該方法的調用者來處理異常。
若該方法可能有多種異常情況產生,那麼在throws後面可以寫多個異常類,用逗號隔開。
public class TestException { public static void getIndex(int index) throws ArrayIndexOutOfBoundsException{ int[] arr = {1,2,3}; if (index < 0 || index > arr.length -1){ throw new ArrayIndexOutOfBoundsException("數組越界"); } } public static void main(String[] args) throws ArrayIndexOutOfBoundsException{ getIndex(4); } }
public class TestException { public static void main(String[] args){ int[] arr = {1,2,3}; //捕獲數組越界異常 try{ System.out.println(arr[4]); }catch (ArrayIndexOutOfBoundsException e){ e.printStackTrace();//獲取異常詳細信息 }finally{
System.out.println("程序繼續執行");
} //繼續執行 System.out.println(arr[2]); } }
可以寫多個catch 捕獲多個異常。需要注意的是catch捕獲異常不能相同,異常子類一般要寫在異常父類上面,否則異常被父類捕獲,子類無法捕獲詳細異常。
在繼承關係當中,如果父類拋出異常,那麼子類重寫父類方法時,拋出和父類相同的異常或者不拋出異常。如果父類沒有拋出異常,子類重寫父類該方法時也不可拋出異常,若該子類方法產生異常,只能捕獲不能聲明拋出。
//自定義異常類 class CustomException extends Exception{ //無參構造方法 public CustomException(){}; //有參 public CustomException(String msg){ super(msg);//繼承Exception 構造方法 } } //測試 public class TestCustomException { public static void main(String[] args){ int[] arr = {1,2,3}; int index = 3; try{ if (index<0 || index>arr.length-1){ throw new CustomException("數組越界"); } }catch (CustomException e){ e.printStackTrace(); } } }
溫馨提示
- 如果您對本文有疑問,請在評論部分留言,我會在最短時間回復。
- 如果本文幫助了您,也請評論關注,作為對我的一份鼓勵。
- 如果您感覺我寫的有問題,也請批評指正,我會盡量修改。