Java 面试题 try fianlly

在这里插入图片描述

  • try{}、catch{}、finally{}中是否可以包含return语句?
  • 三个语句中都可以写return,但是一般finally中不写return,因为会造成返回结果有问题。
  • 如果try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会执行?
  • 一定会执行。

finally无返回值

public class TestFianlly {
    public static void main(String[] args) {
        System.out.println(getNum());
    }
    public static int getNum(){
        int num=10;
        try {
            System.out.println("try");
            return num++;//num++要看成整体,先返回10,后增加

        }catch (Exception e){
            return num++;
        }
        finally {
            num++;
            System.out.println(num+"  finally");
        }
    }
}

输出结果:
try
12 finally
10
try中return要等Fianlly中语句执行完才会返回,但是会把值保存,故返回的是10,而不是12

部分JVM指令
在这里插入图片描述
exception表
在这里插入图片描述

innc指令
对指定的int类型的变量进行+1或+2操作,如i++,i–或i+=2;iinc操作是有参数的此操作对应于自加操作,并且该操作不对stack有任何改变
根据描述可知该指令是需要指定参数的,1.指定变量,2.指定步帧
因此它的结构应该是 iinc slot_ , number ,即,对指定slot_n的变量进行+=number的操作

0~2行 将10压如栈中,在保存到本地表里的slot_0中
11行 将10放入操作数栈
12行 innc 对slot_0进行加一操作 这里对应 try中的num++
15行 将10保存至变量表slot_1中
16行 innc 对 stot_0进行加一操作 对应finally中的num++
44~45行 将slot_1加载至栈中 并返回

num的值对应slot_1 这个值最后变为了12,故finally中输出12
而返回值保存在slot_1中 从开始打最后都是10 ,故返回10
finally中有返回值

public static int getNum1(){
        int num=10;
        try {
            System.out.println("try");
            return num++;//num++要看成整体,虽之后

        }catch (Exception e){
            return num++;
        }
        finally {

            System.out.println(num+"  finally");
            return num++;
        }
    }

try
11 finally
11

finally一定会执行,try中return还没有执行,finally中return就已经返回值,并结束了方法
在这里插入图片描述
finally返回的是 slot_0中的数据

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值