yuzeng222 2022-04-15 11:11 采纳率: 100%
浏览 48
已结题

一个关于Java异常的问题,请大家回答一下

代码如下:
public class ResultTest {

public static void main(String[] args) {
    int test = test(3,5);
    System.out.println(test);

}

public static int test(int x,int y){
    int result = x;
    try{
        if(x < 0 || y < 0){
            return 0;
        }
        result = x + y;
        return result;
    }finally {
        result = x - y;
    }
}

}
请问为什么返回的值是8,而不是-2,请大家帮忙回答一下,谢谢了!

  • 写回答

4条回答 默认 最新

  • qq_25376897 2022-04-15 12:01
    关注

    执行顺序是 先执行try里面的语句,再执行finally里面的语句,最后回到try里面的return(finally如果也有return,就执行finally里面的return。)

    1、执行完result = x + y; result 变为8
    2、执行return result; 这里的操作分两步:
    第一步是把result的结果保存起来(如果这里涉及计算,也会执行,得出值,将值存起来)。
    第二步是跳转到finally 里面继续执行语句,finally 走完再回到这里 把第一步保存的值返回出去。
    3、result = x - y; 刚到这句的时候,result 是8(即上面x+y的结果是带进来了),执行后,result 变为-2,但是没有影响到最后要返回的值。(这里可以看编译出来的class,它是用了两个变量来表示)

    img

    你如果理解了,可以再做一个扩展,思考下如果返回的是一个对象、一个引用类型,结果又会有什么不同。能加深对Java参数传递的理解

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月23日
  • 已采纳回答 4月15日
  • 创建了问题 4月15日