Java中try和finally中有return的区别和执行顺序

今天遇到一个非常有趣的题目,关于Java中try和finally中有return的区别和执行顺序。可以说是让我刷新了知识面。

首先来说说Java中的异常处理:

通过try catch块进行异常的捕获跟处理。语法:

try{
     代码
}catch(异常类型  e){
     发生了异常1,进行处理。     
}catch(异常类型  e){
	 发生了异常2,进行处理。     
}...

try块中写编写可能产生异常的代码。

catch块中用来表示发生了异常,如何进行处理的逻辑。

finally代码块

语法:

try{
     代码
}catch(异常类型  e){
     发生了异常1,进行处理。     
}catch(异常类型  e){
	 发生了异常2,进行处理。     
}...
	fianlly{
	  一定会执行的代码
	}

finally中的代码无论是否异常都会执行,return也无法阻止,除非使用System.exit(1);退出虚拟机。finally也不能单独使用。

而我今天遇到的是try-finally块

try{
     代码
}fianlly{
	  一定会执行的代码
}

大家觉得下面的代码返回值是多少

public static void main(String[] args) {
        System.out.println(a());
    }

    public static int a(){
        int b =3;
        try {
            b=2;
            return b;
        }finally {
            b=1;
        }
    }
}

肯定有人觉得是2,有人觉得是1对吧。

正确答案是2,不信你可以自己去跑跑;

如果换成下面的代码了,输出结果又是什么?

public static Integer a(){
        Integer b=3000;
        try {
            b=2000;
            return b;
        }finally {
            b=1000;
        }
    }

有人觉得是2000,有人觉得是1000对吧。

这个正确答案是2000;

现在你们肯定觉得输出结果都是try里面的值吧,那下面一个代码了?

public static String a(){
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("1","3");
        try {
            map.put("1","2");
            return map.get("1");
        }finally {
            map.put("1","1");
        }
    }

大部分人肯定觉得会是1,我告诉你还是2;

最后一个代码了

public static HashMap<String, String> a(){
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("1","3");
        try {
            map.put("1","2");
            return map;
        }finally {
            map.put("1","1");
        }
    }

这个结果又是什么了?

正确答案是1,finally的修改终于有作用了

大家觉得这是为什么了?

总结一下:

1.try中有return,但是finally中无return,但是finally中有代码,这个时候finally的代码会执行。

        如果try中return返回的是对象,在finally中的代码对return返回的对象修改,return返回的值是修改后的值。
        如果try中return返回的是基本数据类型,在finally中的代码对return返回的基本数据类型修改,try中return的值不会被改变。integer是会自动拆箱,return出的值是基本数据类型。

2.try中有return,finally中也有return,这个时候,无论返回的是什么数据类型,结果都是返回finally中return的内容。

如果有不对的地方希望大家指正出来,我会虚心接受,以上都是我个人看法。
 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力学习Java的鱼

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值