异常相关知识

a.异常

        1.java内置了异常处理机制,总是用异常来表示错误
        2.Throwable是异常体系的根,分两个体系:Error和Exception,Error表示严重错误,程序无法处理;Exception是运行时错误,可以被捕获并处理。
        3.Exception分为两类
                1.RuntimeException以及它的子类。
                2.非RuntimeException(IOException)。
        4.java规定
                1.必须捕获的异常,Exception以及它的子类,不包括RuntimeException及其子类,这种异常叫做Checked Exception。
                2.不需要捕获的异常,Error及其子类,RuntimeException及其子类。
        5.注意
                1.编译器对RuntimeException及其子类不做强制捕获要求,不是指应用程序本身不应该捕获并处理,具体问题具体分析。
                2.只要在方法中声明了Checked Exception,不在调用层捕获,也必须在更高的调用层捕获,main()方法是最后捕获Exception的机会。
                3.java的异常是class,并且从Throwable继承。

b.关键字

        1.try
                抛出异常
        2.catch
                捕获异常
        3.final
                1.无论发生什么异常,都会被执行(清理资源等)。
                2.不是必须的,可写可不写。
                3.总是最后执行。
        4.throw
                当程序发生异常而无法处理的时候,会抛出对应的异常对象
        5.throws
                在类中捕获异常信息,标明方法可能抛出的异常。

c.捕获异常

        1.多catch语句
                1.使用多个catch语句捕获异常,每个catch捕获对应的异常及其子类,JVM在捕获到异常后,从上到下匹配catch语句,匹配成功后,执行代码块并不再继续匹配,即多个catch语句只会执行一个。
                2.顺序很重要,子类必须放在前面,否则永远执行不到。
        2.捕获多种异常
                1.有些异常逻辑相同,但异常本身不存在继承关系。

d.抛出异常

        1.创建Exception(异常)实例;用throw语句抛出 。例:throw new 异常类();
        2.一个方法捕获了某个异常后,又在catch语句中抛出新的异常,相当于把抛出的异常类型“转换”了;
        为了能保留原始异常信息,需要把原始异常的信息传递给新的异常,可进行原始异常定位。
        3.捕捉到异常再次抛出时,一定要传递原始信息,否则很难定位到第一案发现场。

        构造异常时,把原始的Exception实例传进去,新的Exception就可以持有原始Exception信息。

        4.屏蔽异常
                1.finally抛出异常后,原来在catch中准备抛出的异常就“消失”了,因为只能抛出一个异常。没有被抛出的异常称为“被屏蔽”的异常(Suppressed Exception)。
                2.在绝大多数情况下,finally里不要抛出异常。因此,我们通常不关心Suppressed Exception。

e.自定义异常类

        1.抛出异常时,尽量使用JDK已定义的异常类型。
        2.尽量从RuntimeException派生根异常(BaseException),再从根异常派生业务异常。
        3.自定义异常时,应提供多种构造方法,照抄父类的构造方法即可。

f.NullPointException(NPE)

        1.一个对象为null,调用其字段或方法,这个异常通常是由JVM抛出的。
        2.是一种代码逻辑错误,处理原则:早暴露早修复。
        3.java14后,JVM可以给出详细信息直接定位null对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值