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.父类没有抛出过的异常,子类不能抛出

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