异常(异常最大的功能就是报告和处理错误)

1.为何要有异常

异常就是用来处理程序中可能出现的错误,异常处理是与程序正常执行并行的另一条路径,是在发生错误时执行的另一条路径,提供了一种从错误状况进行可靠恢复的途径(如在catch或finally语句中换条路),避免遇到错误就终止程序的运行。

实际项目中异常和记录日志的结合使用是绝配

2.异常的继承结构

在这里插入图片描述

Throwable是异常和错误方面的超类。红色为编译期异常,编译器会在编译时对着写异常检查,如果我们没有在代码中处理这些异常,会在编译的时候报错;Error虽然不会在编译期要求我们必须处理,但是通常情况下,我们对此类异常无能为力;RuntimeException异常一般是我们的代码逻辑异常,这地方是我们可以操控的

3.异常的处理三种方式

3.1 try-catch-finally

try中存放可能出现异常的代码(也可以将try放入循环中,即多执行几次减小错误的几率),catch中存放出现异常时你想执行的代码,finally中存放,无论如何你都想要执行的代码(如关闭文件、网络、图形、外部开关等资源)。
值得注意的是finally中的代码如果出现异常也会导致finally内其他语句不会执行,所以有时候我们需要在finally里面嵌套try-catch语句

代码如下

public class MainException {
    public static void main(String[] args) {
        try {
            int b = 10;
            for (int i = 1; i < 10; i++) {
                System.out.println("程序正常执行输出" + (b / i));
            }
        } catch (Exception e) {
            System.out.println("出现错误输出默认值" + 0);
        } finally {
            System.out.println("程序执行完成");
        }
    }
}

3.2 声明抛出异常清单 throws

throws可以说是缓兵之策,把方法中可能存在的异常显式的抛出,由方法的调用者或者上级代码层进行处理,这样做的好处就是可以在一个地方进行集中处理,可以让下层代码只关注于实现,在抽象类和接口中常用

代码如下,抛出的异常由调用者处理

public class MainException {
    public static void main(String[] args) {
        int a = 0;
        int b = 10;
        try {
            test(0, 10);
        } catch (ArithmeticException e) {
            System.out.println("程序出现错误");
        } finally {
            System.out.println("程序执行完成");
        }
    }

    public static int test(int a, int b) throws ArithmeticException {
        return b / a;
    }
}

3.3 手动抛出一个异常 throw

通常用于抛出自定义的异常,这就具有了很大的灵活性,我们可以通过这个来做很多事情,比如限定数据范围,出现我们不希望的数据时终止程序的执行,模拟异常情况下代码的执行情况等
public class MainException {
    public static void main(String[] args) throws Exception {
        int a = 0;
        int b = 10;
        if (a == 0) {
            throw new MyAthException("a不可等于0,此处中断程序的运行");
        } else {
            System.out.println(b / a);
        }
    }

}

//此处为我们自定义的异常
class MyAthException extends Exception {

    public MyAthException(String message) {
        super(message);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值