異常(Exception)

異常在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,此時在catchreturn一個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(); //報錯
View Code 

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;
        }
}
View Code

自定義異常:定義一個類繼承某個異常類,若是繼承的是Exception或者是其它的異常,那麼定義了一個編譯時異常;若是繼承的是RuntimeException或者是它的子類,那麼定義的就是一個運行時異常。

方法重載時,對異常的範圍沒有限定

方法重寫時,子類拋出的編譯時異常不能超過父類編譯時異常的範圍

相關文章
相關標籤/搜索