异常中finally的使用.

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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值