異常在Java中是用於問題的反饋和處理的機制java
Throwable是全部異常或錯誤的超類數組
區分異常和錯誤:ide
錯誤:一旦出現,不能處理函數
異常:出現後能夠處理,處理方式:捕獲或者繼續拋出this
捕獲方式:(try{}catch(){})spa
1、多個異常處理方式不一樣,用多個catch分別捕獲分別處理指針
2、全部異常處理方式都同樣,捕獲一個父類異常統一處理code
3、多個異常分紅不一樣組,不一樣組之間能夠用 | 隔開分組處理(JDK1.7開始)orm
注意:try-catch同時出現,意味着try不必定能執行成功,try在不是必然成功的前提下,try中的return不必定執行blog
try{ return 1; } catch(Exception e){ e.printStackTrace(); }
報錯會提示:This method must return a result of type int,此時在catch中return一個int型數據便可,或在catch方法結束後返回一個int型的值
Java中的一些異常提示:
編譯時異常:編譯的時候就出現,因爲在編譯的時候就已經出現,因此要求必須處理。
CloneNotSupportedException 不支持克隆異常
ParseException 解析異常(日期或者字符串格式化時可能會拋出這個異常)
package cn.jay.exer; import java.text.SimpleDateFormat; import java.util.Date; public class Exer14 { public static void main(String[] args) throws Exception { /* String str = "2018-7-18 13:12:11"; SimpleDateFormat sdf = new SimpleDateFormat(); Date date = sdf.parse(str); System.out.println(date); //java.text.ParseException: Unparseable date: "2018-7-18 13:12:11" */ String str = "2018-7-18 13:12:11"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date date = sdf.parse(str); System.out.println(date); } }
運行時異常:運行的時候纔出現,能夠處理,也能夠不處理。 --- RuntimeException(全部運行時異常父類)
ArithmeticException 算數異常(整數/0)
ArrayIndexOutofBoundsException數組下標越界異常
NullPointerException 空指針異常
PatternSyntaxException 正則格式異常
NumberFormatException 數字格式化異常
Integer in=new Integer("0x456");
ClassCastException 類轉換異常
ArrayStoreException 數組存儲異常
InputMismatchException 輸入不匹配異常(用switch語句實現簡單計算器時出現)
EmptyStackException 空棧異常
ConcurrentModificationException 當前標記異常(標記不匹配)
List<String> list = new LinkedList<>(); //中間代碼省略 Iterator<String> it = list.iterator(); //中間代碼省略 it.remove(); //不報錯 list.remove(); //報錯
NotSerializableException 不能序列化異常
後續遇到其它異常會繼續更新...
Java中異常處理流程(讀取文件時的路徑異常處理)
public class Test{ public static void main(String[] args) throws PathNotExistException{ //若讀入的文件路徑必然正確,則異常不用捕獲處理,直接拋出便可 try{ //異常捕獲處理後,主函數中不用拋出異常 //讀取文件 String msg = readTxt("H:\\test.txt"); }catch(PathNotExistException){ //進行異常處理 System.out.println(e.getMessage()); } } public static String readTxt(String path) throws PathNotExistException{ //文件路徑可能不存在,此時應該拋出異常,方便其餘使用該文檔的人清楚其中可能出現的異常狀況,若是方法中捕獲的是父類異常,要在上面單獨的捕獲方法後再catch一個父類異常,且該父類異常必須在單獨異常以後 if(path.startWith("H:\\")){ throw new PathNotExistException("警告:路徑以H開頭!"); } return "文件讀取成功!"; } //自定義異常(PathNotExistException) class PathNotExistException extends Exception{ private String message; public PathNotExistException(){} Public PathNotExistException(String message){ this.message =message; } public String getMessage(){ return message; } }
自定義異常:定義一個類繼承某個異常類,若是繼承的是Exception或者是其它的異常,那麼定義了一個編譯時異常;若是繼承的是RuntimeException或者是它的子類,那麼定義的就是一個運行時異常。
方法重載時,對異常的範圍沒有限定
方法重寫時,子類拋出的編譯時異常不能超過父類編譯時異常的範圍