java return在try中_java中return在Try-Catch中的执行顺序

我们知道return会结束此方法并返回指定值。以及在Try-catch-finally中无论try代码块中有没有异常finally中的代码时都会被执行的。但是如果return包含在try-catch-finally中的try或catch块中会怎样呢?

我们再做个试验:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 static int txt(){

2 try {

3 @SuppressWarnings("unused")

4 int a=5/0;

5

7 } catch (Exception e) {

8 System.out.println("catch");

9 return 2;

10 }finally{

11 System.out.println("finally");

12 }

13 return 3;

14 }

demo

看上面代码我们知道在try中”int a=5/0”是肯定会报错的接下来程序会进入catch中进行异常处理但是在catch中使用return 返回了一个2;这时finally中的代码到底还会会走呢?如果finally中的代码走了的话,return返回的结果又是什么?

我们来开一下调用此方法输出的结果:

2c18dbc9c05e27ef41f2ee8daa0e0a26.png

我们可以看到finally块即使catch块有return他还是会被执行的

我们再来开下面一个例子

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 static int txt(){

2 try {

3

4 int a=5/0;

5

6

7 } catch (Exception e) {

8 System.out.println("catch");

9 return 2;

10 }finally{

11 System.out.println("finally");

12 return 3;

13 }

14

15 }

demo

这时return返回的又是多少呢?

话不多时来看结果吧:

7312385f53f32e7881d217de7daea6ff.png

我们可以这摸理解:我们定义一个有返回值类型的方法时系统会自动声明一个堆栈上的内存地址用来存放此方法返回的值这也是我们定义一个有返回值类型的方法却没有给定返回值是产生编译错误的原因!当程序执行到catch块的return时会吧return后面的值存放在事先声明的堆栈内存中并不结束此方法后再执行finally块的代码,但是finally块中也有return关键字所以在事先声明的堆栈内存中保存的值也就变成了finally块中return后面的值。又因为finall块后有没有强制执行的代码块所以此方法结束。

以上内容为个人理解如有 不足之处请各位大神多多指正。

思考:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 static int txt(){

2 int a=1;

3 try {

4

5 a++;

6 return a;

7

8 }finally{

9 ++a;

10 }

11 }

demo

此方法的返回值是多少。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值