关于finally的易错点

首先要知道finally是一定要执行的

    private static int extracted() {
        int i = 10;
        try {
            return i++;  // 先return  再++ 此时i=11
         }catch (Exception e){
            e.printStackTrace();
        }finally {
            i++;      //此时i=12
            System.out.println("i的值是"+i); //所以打印为12
        }
        return i; //此行为了运行,因为try里面的语句,Java不一定执行,认为不一定有返回值,所以要给            
                   //一个返回值
    }

执行上述代码,调用后的返回值为10   而控制台打印为12

再来看一个引用数据类型,Person类有set方法设置成员变量

    private static Person m(){
        Person person = new Person();//因为new一个对象,所以存储在堆空间中
        try {
            person.setName("zjl");
            person.setAddress("tw");
            return person; //返回的是对象的地址
        }finally {
            person.setName("jjj"); //而此时修改的正是对象的地址,finally最后一定执行
            person.setAddress("qqq");//所以此时返回的数值为jjj、qqq
        }
    }

上面答案为jjj、qqq

我们再来一个字符串

   private static String mo(){
        String str ;
        try {
            str = "abc";
            return str;//返回的是上面str的地址,也就是abc常量的地址
        }finally {
            str = "def";//而str现在的地址已经被更改了
        }

    }

此时返回的值为abc,因为字符串是常量不可更改,可知String不可修改,而String更改后更改的是地址值,所以返回的是abc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值