IO前哨站之##异常机制##

异常机制:比如小明,是一名骑行爱好者,有一天,他骑着自己心爱的捷安特自行车,骑着骑着,车胎没气了,这个问题对于他来说,是个小问题,可以解决,也可以不解决,那如果说,骑着骑着轮胎飞了,那么这个问题,是个大问题,他解决不了。那么他在出门之前,发现这个车闸松了,那么这个问题,必须解决。
Throwable
Error 错误,属于严重性问题,我们无法解决
Exception 异常 属于一般性问题,我们是可以解决的。
分两种:
运行期异常:可以解决,也可以不解决 RuntimeException及其子类
编译期异常:必须处理,发生在编译期间。非RuntimeException及其子类
RuntimeException的子类:
ArithmeticException 数学异常 运行期异常,你自己没有处理,那就交给了JVM去处理,那么JVM的处理方式,是打印异常信息,然后退出虚拟机。

int a=10;
        int b=0;
        System.out.println(a/b);

如果我们觉得JVM默认处理运行期异常的方式,不是很友好好,那么我们自己可以处理一下我们需要使用 try catch 关键字 对异常进行捕获处理
finally //最终的不管你有没有遇到异常,那么finally里面的代码都会执行

int a = 10;
        int b = 0;
        try {
            System.out.println(a / b);
        }catch (ArithmeticException e){
            //一旦发生异常,你对异常的具体处理逻辑
            System.out.println("0为除数了");
        }finally {//最终的不管你有没有遇到异常,那么finally里面的代码都会执行
            System.out.println("释放资源");
            if(scanner!=null){
                scanner.close(); //释放资源
            }

NullPointerException 空指针异常
ArrayIndexOutOfBoundsException 数组角标越界异常
Exception 其他未知异常

注:你能明确异常的类型,你就尽量的明确,不要拿最大的异常去捕获。
多个异常类,如果是并列关系,前后无所谓
多个异常类,如果有父子,关系,父类写在最后面

如何处理编译器异常

方式1,抛出异常 throws ,抛给调用者去处理,俗称甩锅 谁调用谁处理
方式2:自己try catch 处理

throws与throw的区别
throws:用在方法声明上,可以抛出多种异常类型 他只是抛出了一种可能性,有可能这种异常会发生,并不代表一定会发生
throw:用在方法内部,只能抛出一种异常对象,这种只要抛出了, 那这种异常肯定是发生了

当JVM都不知道什么异常的时候 就要自己定义一个异常 但要继承RuntimeException

public class MyTest {
    public static void main(String[] args) {
        //当Java给我们提供的这些异常类型,不满足我们的需要时,我们需要自定义异常
        int num=100;
        System.out.println("请输入取款金额");
        Scanner scanner = new Scanner(System.in);
        int money = scanner.nextInt();
        if(money<=num){
            num-=money;
            System.out.println("取款成功");
        }else{
            //System.out.println("");
            throw new NoMoneyException("余额不足");
        }
    }
}
public class NoMoneyException extends RuntimeException {
    public NoMoneyException(String msg) {
        super(msg);
    } //将我写的这个异常类,纳入Java到Java的异常体系当中

}

快捷键ctrl+alt+T 把一段代码进行异常的捕获处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值