首页 > 试题广场 >

以下代码段执行后的输出结果为

[单选题]
以下代码段执行后的输出结果为
public class Test {
    public static void main(String[] args) {
        System.out.println(test());

    }
    private static int test() {
        int temp = 1;
        try {
            System.out.println(temp);
            return ++temp;
        } catch (Exception e) {
            System.out.println(temp);
            return ++temp;
        } finally {
            ++temp;
            System.out.println(temp);
        }
    }
}


  • 1,2,2
  • 1,2,3
  • 1,3,3
  • 1,3,2
finally代码块在return中间执行。return的值会被放入临时空间,然后执行finally代码块,如果finally中有return,会刷新临时空间的值,方法结束返回临时空间值。
发表于 2019-10-09 18:30:00 回复(13)
执行顺序为:
输出try里面的初始temp:1;
temp=2;
保存return里面temp的值:2;
执行finally的语句temp:3,输出temp:3;
返回try中的return语句,返回存在里面的temp的值:2;
输出temp:2。
发表于 2018-12-21 17:51:01 回复(10)
1、finally块一定会执行(除非退出虚拟机),无论是否try…catch。
2、finally块前有return,会先执行return语句,并保存下来,再执行finally块,最后return。
3、finally块前有return、finally块中也有return,先执行前面的return,保存下来,再执行finally的return,覆盖之前的结果,并返回。
发表于 2020-06-09 15:51:28 回复(4)
个人理解,有错请指正。
1.若try代码块内含有return,同时存在finally代码块(代码块内无return值)时,先执行finally函数的值。
2.若try代码块内含有return,同时存在finally代码块且代码块内含有return值时,此时finally代码块内的return值将直接返回(或覆盖掉try代码块中的return值)。
public class Test {
public static void main(String[] args) {
System.out.println(test()); //第三个输出,输出try的返回值
}
private static int test() {
int temp = 1;
try {
System.out.println(temp);//第一个输出
return ++temp;//此时返回的temp值为++temp的值,即为2
}
// catch (Exception e) {
// //System.out.println(temp);
// return temp;
//
// }
finally {
System.out.println("测试:"+temp);//测试用
++temp;
System.out.println(temp);//第二个输出
}
}
}

编辑于 2019-08-31 12:12:36 回复(4)
发表于 2020-03-04 23:36:58 回复(2)

这里需要注意的是:try 块里的 return ++temp; 可以拆分为:int temp = temp + 1; return temp;

发表于 2020-03-05 22:35:23 回复(2)
当try代码块中有return时,会先把return的值放在一块临时空间中,再执行finally代码块中,最后返回return临时空间中存储的值。如果finnally中也有return语句则会更新return临时空间中的值。
编辑于 2021-12-12 18:33:21 回复(0)
运行时先执行finally里面的值,return的值会先放入临时空间,如果finally也有return则会刷新临时空间的值。
发表于 2021-12-18 16:19:15 回复(0)
finally里面有return就会被覆盖,没有则取回try中的值
发表于 2020-03-11 13:44:23 回复(0)

1.执行try | catch语句块里面的代码,若有return,将暂时保存return 要返回的值,去执行finally语句块的代码,最后才return。

发表于 2019-10-29 22:11:27 回复(0)
第一步:执行try 语句,输出1 ,返回 2 
第二步:执行finally语句,输出3
第三步:执行主方法,输出返回值 2
发表于 2021-10-18 23:38:42 回复(5)
这里需要明确try、catch、finally的执行顺序,首先执行的是try中的代码块,这里执行完成过后,已经return 了temp的值,由于并没有抛出异常,所以继续执行finally(不论什么情况,finally都会执行),由于在try中temp的值以及提交了,finally虽然保留了可操作空间,但是并不能影响到已经提交的temp了。但如果在finally里面有return,那么finallyreturn中的值会覆盖try中的temp
发表于 2021-05-13 10:42:36 回复(2)
在try中,return执行时已经将值存到了too中,由于不得不执行final此时执行的语句不会影响到return的temp值
发表于 2022-02-15 14:57:14 回复(0)
finally块执行完后,才算整个test()方法执行结束。即执行顺序为finally块打印3,return 2;,主方法打印2.
发表于 2022-01-28 11:57:31 回复(3)
finally代码块在return中间执行。return的值会被放入临时空间,然后执行finally代码块,如果finally中有return,会刷新临时空间的值,方法结束返回临时空间值。
发表于 2021-07-08 18:46:36 回复(0)
<p>finally 在return前执行</p>
发表于 2020-06-15 13:00:15 回复(0)
我看漏了main方法里的打印😂😂😂
发表于 2020-03-26 16:36:30 回复(0)
int temp = 1;

try {
System.out.println(temp);
return ++temp;
} catch (Exception e) {
System.out.println(temp);
return ++temp;
} finally {
++temp;
System.out.println(temp);
}
1.执行try,先打印temp                             ->1
2.++temp ,保存return 中的temp=2  
3.执行finally,打印 ++temp                       ->3
4.执行return                                               ->2
(try-finally-再return)
发表于 2020-03-05 18:48:16 回复(0)

try catch finally中,try catch中如果有return ,将先执行return后面的逻辑运算,将该职暂时保存,然后执行finally中的内容,执行完以后。再返回该暂时保存的变量

发表于 2020-01-17 08:20:42 回复(0)

细节:catch中如果捕获到异常,就和try的一样,如果finally中有return语句也就会将catch中的return覆盖!

发表于 2022-11-08 09:03:04 回复(0)