Java异常总结

1:Java异常结构图

这里写图片描述

2:异常父类Throwable以及子类

  • 有两个重要的子类:ExceptionError,二者都是Java异常处理的重要子类,他们都包含大量的子异常类。
Exception
  • 程序本身可以处理的异常,并可以通过try/catch块捕获处理的异常eg:RuntimeException、NullPointerException、ArrayIndexOutOfBoundException等等
Error
  • 程序无法处理的错误,表示程序运行中出现的比较严重的问题,大部分与代码编执行没有关系,也不能被捕获处理eg:OutOfMemoryError、NoClassDefFoundError等等

3:按照编译器是否强制要求处置异常分类

可查的异常(checked exceptions)
  • 除了RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。
不可查的异常(unchecked exceptions)
  • RuntimeException及其子类和Error,编译过程中不去处理,仍然可以正常编译通过。

4:Exception具体分类

运行时异常类似可查异常
  • RuntimeException类及其子类的异常如NullPointerException、IndexOutOfBoundsExceptiond等,这种异常一般属于不可检查异常,不影响编译,代码处理过程中可以选择性的处理,但还是建议尽量避免类似的异常发生,中断程序。
非运行异常类似不可查异常
  • 也叫做编译异常RuntimeException之外的异常如IOException、SQLException以及用户自定义的异常若不处理,程序无法编译通过。

5:异常处理

正常处理方式(具体使用不过多赘述)
  • try{}catch{}
  • try{}catch{}finally{}无论有无异常finally代码块都会被执行
  • try{}finally{}也是可以组合使用的但是catch{}finally{}不可以
    注意: 在继承关系中,子类覆盖父类的方法,抛出异常的范围不能比父类更宽泛异常的使用.
异常链
  • 可以使用继承throwable的initCause来进行异常类型转化,已一个优美可控的输出来处理异常
    MyException提示性异常可以直接抛到前端用户查看
    Exception除MyException之外的异常不可以直接抛到前端不友好,通过initCause()方法将此类异常吃掉转化成MyException自定义用户可接受的信息,将实际异常放到了异常的CauseBy部分便于排查问题ßß

  • 举个栗子

public class TestException {
        try {
            String response="JsonStr"
            JSONObject jsonResponse = JSONObject.parseObject(response);
            if (!jsonResponse.getBoolean("success")) {
                throw new MyException("友好提示信息");
            }
        } catch (MyException me) {
            throw me;
        } catch (Exception e) {
            Exception me = new MyException("转化成的友好提示信息");
            me.initCause(e);
            throw me;
        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值