Java异常处理机制难点解惑-用代码说话

本文深入探讨Java异常处理机制,包括异常分类、基本规则、finally的执行特性以及在继承和接口实现中的异常限制。通过实例解析了在不同情况下finally块的执行逻辑,如何影响返回值,以及可能出现的异常丢失问题。
摘要由CSDN通过智能技术生成

是否需要看这篇文章?

下面的例子中,如果正常执行返回值多少? 如果出现了ArithmeticException返回值多少? 如果出现非ArithmeticException(如NullPointerException)返回值多少?
如果你了解这个例子说明的问题,并了解例子中三种情况下的执行细节,这篇文章你就不用浪费时间看了。
例子:

    public int testException_finally(){
        int x;
        try {
            x = 1;
//int y = 1/0;  //放开此处,出现ArithmeticException。

/*//注释掉 int y = 1/0;处,放开此处,出现NullPointerException
            String str = null; 
            str.substring(0);
            */
            return x;
        } catch (ArithmeticException e) {
            x =2;
            return x;
        } finally{
            x = 3;
        }
    }

答案:
如果正常执行,返回值为1;
如果抛出ArithmeticException,返回值为2;
如果抛出其他Exception,则抛出该Exception,无返回值。

一看就知晓的同学们,散了吧。这篇文章你们不需要看了。
不知所云的同学们,请继续往下看。下面要说的正适合你☺

1. Java异常的分类

Throwable类是Java语言中所有异常和错误的基类。Throwable有两个直接子类:Error和Exception。Error用来表示编译期或系统错误,一般不用我们程序员关心(现在还是程序猿,但有一颗想做架构师的心☺);Exception是可以被抛出的异常的基本类型,这个才是我们需要关心的基类。
Java异常在设计时的基本理念是用名称代表发生的问题,异常的名称应该可以望文知意。异常并非全是在java.lang包中定义,像IO异常就定义在java.io包中。在Exception中,有一种异常:RuntimeException(运行时异常)不需要我们在程序中专门捕获,Java会自动捕获此种异常,RuntimeException及其子类异常再加上Error异常,被统一叫做unchecked Exception(非检查异常);其他的Exception及其子类异常(不包括RuntimeException及其子类异常),被统一叫做checked Exception(检查型异常)。对于检查型异常,才是我们需要捕获并处理的异常。非检查型异常Java会自动捕获并抛出。当然,我们也可以主动捕获RuntimeException型异常。但是Error型异常一般不去捕获处理。

2. Java异常处理的基本规则

对于可能发生异常的Java代码块,我们可以将其放入try{}中,然后在try之后使用catch(***Exception e){}处理抛出的具体异常,如果没有匹配的catch处理抛出的异常,则会将该异常向上一层继续抛出,直到抛至Main()方法。
有一些代码,我们希望不管try中的代码是成功还是失败都需要执行,那么这些代码我们就可以放在finally{}中。
Java的异常处理采用的是终止模型,即如果try块中的某处出现了异常,则立刻停止当前程序的运行,在堆中创建对应的异常对象,异常的处理转入到异常处理代码处(即对应的catch块),执行完异常处理代码后,try块中出现异常处之后的程序将不会被执行,程序会跳出try块,执行try块之外的程序。
例子:覆盖知识点:①执行对应的catch;②一定执行finally中代码;③try出异常之后的代码不再执行;

public String testException_one(){
        String str = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值