异常中finally的使用.

java 专栏收录该内容
14 篇文章 0 订阅

finally:
(1).必然执行的异常统一处理出口
(2).无论是否发生异常.finally必然执行,适合存放释放资源,后续处理的代码.
总之就是,大部分的情况下,finally一定会执行,但是也有不先执行finally执行的特例=>
(1)finally里发生异常.程序不会执行(finally第一句产生异常后续的不会执行)
(2).程序所在线程死亡或关闭了cpu,也就是说外界不可抗力的因素造成的电脑突然关机,停电等.
下面看一下两个finally一定会执行后的不同结果:
…首先先描述一下执行的过程,如果try中有return时,再返回阶段时,会去先执行finaly里的程序.
(1)finally执行后数值改变

public static void main(String[] args){
    Person p = show();
        System.out.println("年龄是"+p.age);

    }
    public static Person show(){
        Person person = new Person();
        try{
            //这里赋予person的年龄是18
            person.age=18;
            return person;
        }catch(Exception e){

        }finally{
            //finally里改变person的年龄
            person.age=38;
        }

        return person;
    }

输出的结果是;

年龄是38

(2)finally执行后数值没有改变

public static void main(String[] args){
        int ageNum = show();
        System.out.println("年龄是"+ageNum);

    }
    public static int show(){
        int age;
        try{
            age = 18;
           return age;
        }catch(Exception e){

        }finally{
            age = 38;
        }
        return age;

    }

输出结果是:

年龄是18

…>其实在这两个案例中,finally都执行了,第一个是引用类型的数值,引用的是地址.而第二个是非引用数据类型.
…>在程序编译后,会被编译成字节码.class文件,当被打包成一个文件后,这个文件就是独立的,引用的外部数值就会在打包前进行数据备份.
所以.(1)程序中在return时,将person.age备份,这里备份的是一个地址,当finally数值改变后,备份的数据仍旧是一个地址,通过地址查找到的数值就是已经改变掉数值.
(2)程序中在return时,备份的是一个数值,之后从备份中查找数据还是那个数值,没有改变.

  • 2
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论
请先登录 后发表评论~
©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页

打赏作者

QwoYko.

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值