IO流前奏 之異常處理

在這裏插入圖片描述

異常處理

編譯期異常: 必須處理,否則導致程序無法運行
運行期異常: 兩種處理方式
1.默認處理方式,向上拋出,誰調用誰處理(俗稱甩鍋)
2.自己使用try catch捕獲異常

throws

拋出異常,拋出的僅僅是出現異常的可能,誰調用就拋給誰

import java.text.ParseException;
import java.text.SimpleDateFormat;

public class demo1 {
    public static void main(String[] args) throws ParseException {
    String str="2019-01-05";
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
        format.parse(str);
    }
}

try catch使用實例

public class demo1 {
    public static void main(String[] args) {
        try{
            System.out.println(1/0);
        }catch (ArithmeticException e){
            e.printStackTrace();//打印堆棧的異常狀況
            System.out.println("除數爲零!");

        }
        System.out.println("111");

    }
}

除數爲零!
java.lang.ArithmeticException: / by zero
111
	at demo1.main(demo1.java:4)

try catch finally的使用

不論有沒有發生異常,finally中的代碼都會執行,一般在finally中做一些善後工作,比如釋放一些資源,例如流的關閉

throw

當Java中的異常不能滿足你對異常的描述需求,那你就需要自定義一個異常了
例:模擬銀行取錢系統,餘額爲1000元,當輸入取款金額大於1000元是報錯:NoMoneyException並提示餘額不足

import java.util.Scanner;

public class demo1 {
    public static void main(String[] args) {
        int money=1000;
        Scanner sc = new Scanner(System.in);
        System.out.println("請輸入取款金額:");
        int i=sc.nextInt();
        if (money-i<0){
            throw new NoMoneyException("餘額不足!");
        }else{
            System.out.println("取款成功,餘額爲:"+(money-i)+"元!");
        }
    }
}
class NoMoneyException extends RuntimeException{
    public NoMoneyException(String msg){
        super(msg);
    }
}
請輸入取款金額:
2000
Exception in thread "main" NoMoneyException: 餘額不足!
	at demo1.main(demo1.java:10)

throws 和throw的區別
throws在方法聲明上進行拋出,可以拋出多個異常,它拋出的只是一種可能性,是有可能會發生錯誤
throw在方法內部進行拋出,只能拋出一個異常對象,如果有異常拋出,那麼一定是發生了異常的

繼承中的異常

1.如果父類沒有拋出異常,那麼子類在重寫父類方法時也不能拋出異常,如果有異常只能自己使用try catch進行捕獲
2.若父類中有異常拋出,子類在在重寫方法時遇到異常時不能拋出比父類的異常大的異常,即子類拋出的異常只能是父類拋出的異常的子類,或者與父類拋出的異常一致。
3.父類沒有拋出過的異常,子類不能拋出

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章