首页 > 试题广场 >

下面程序的输出是什么?

[单选题]
下面程序的输出是什么?
public class TestDemo
{
    public static String output = "";
    public static void foo(inti)
    {
        try
        {
            if (i == 1)
            {
                throw new Exception();
            }
        }
        catch (Exception e)
        {
            output += "2";
            return ;
        } finally
        {
            output += "3";
        }
        output += "4";
    }
    public static void main(String[] args)
    {
        foo(0);
        foo(1);
        System.out.println(output);
    }
}

  • 342
  • 3423
  • 34234
  • 323
推荐
答案:B
首先是foo(0),在try代码块中未抛出异常,finally是无论是否抛出异常必定执行的语句,
所以 output += “3”;然后是 output += “4”;
执行foo(1)的时候,try代码块抛出异常,进入catch代码块,output += “2”;
前面说过finally是必执行的,即使return也会执行output += “3”
由于catch代码块中有return语句,最后一个output += “4”不会执行。
所以结果是3423
编辑于 2015-01-10 11:55:31 回复(17)

B

发表于 2017-04-04 12:41:45 回复(0)
B.
1.执行foo(0)时,不满足try语句块中的if语句,所以不会抛出异常,执行finally语句
2.执行foo(1)时,满足try中的If语句,抛出异常,在catch中进行异常处理,虽然有return语句,但是finally中的内容必须执行,也就是说要先执行了finally才进行return操作,return后  output += “4”将不会再执行.
发表于 2015-08-13 16:45:41 回复(6)
谁说finally块必须执行?不服来辩

try-catch-finally块中,finally块在以下几种情况将不会执行。

(1)finally块中发生了异常。

(2)程序所在线程死亡。

(3)在前面的代码中用了System.exit();

(4)关闭了CPU

发表于 2016-10-14 19:51:32 回复(24)
try-catch-finally终极总结:理解我这三句话,扫遍这类题。1、finally在try的return表达式执行之后,返回之前;2.如果finally有return则覆盖try的return.3.如果try的return语句有异常,则其return语句失效。
发表于 2018-04-19 22:19:21 回复(0)
注意看catch里面的return;
发表于 2015-04-09 23:22:10 回复(1)
try catch  finally 
finally{} 块中的语句必定会执行。
当try  catch 块中有return语句时候,程序执行finally中的语句后会退出。

 return用法: 1. 返回方法制定类型的值

                       2. 结束方法的执行(仅仅一个"return;”)
由此可见当catch块中含有return会结束方法的执行。output += “4”;这句活得不到输出。

发表于 2015-11-16 19:05:00 回复(7)
选34234的人肯定忽略了catch里边的return,有没有同样踩坑的,哈哈哈
发表于 2021-10-12 14:27:52 回复(0)
首先,本题的答案为3423。
很多人错应该就是选择了A选项342,所有人都知道finally中的代码是一定会执行的,但是就是会被这道题的这么长的代码给带进去,之后就忘记了最后那个finally,所以,请一定记得,finally中的代码一定要执行,不管有没有异常。
发表于 2016-09-03 20:55:13 回复(0)
1.  执行foo(0)时,在try代码块中未抛出异常,finally是无论是否抛出异常必定执行的语句,
所以 output += “3”;然后是 output += “4”;
2.  执行foo(1)的时候,try代码块抛出异常,进入catch代码块,output += “2”;
前面说过finally是必执行的,即使return也会执行output += “3”
由于catch代码块中有return语句,最后一个output += “4”不会执行。
发表于 2017-04-22 20:21:17 回复(2)
finally 是一定会执行的,出现异常后就不执行finally语句 以后的代码了。
发表于 2015-08-17 10:06:37 回复(1)
发生异常后,不在执行try catch finally以外的内容,其中finally是必须执行的,程序执行到return时,先计算返回的内容,再执行finally内容,再返回return的值。
发表于 2019-03-18 10:32:01 回复(0)
答案:B
首先是foo(0),在try代码块中未抛出异常,finally是无论是否抛出异常必定执行的语句,所以 output += “3”;然后是 output += “4”;结果:34
执行foo(1)的时候,try代码块抛出异常,进入catch代码块,output += “2”;前面说过finally是必执行的,即使return也会执行 output += “3”
由于catch代码块中有return语句,最后一个output += “4”不会执行。
所以结果是3423
发表于 2015-10-27 11:32:37 回复(0)
3423
发表于 2014-11-14 20:40:43 回复(0)
catch中的return直接结束了方法,output += "4"不再执行
发表于 2022-07-27 14:29:39 回复(0)
当try或catch中存在return语句时,先执行try或catch中return前的语句,然后执行finally语句,组后执行return
发表于 2021-09-11 16:39:49 回复(0)
if 里面那个i没有定义吧? return; 直接接分号吗?
发表于 2020-12-15 22:55:49 回复(0)
选了432
之前做的是int类型
这里是String不是基本类型,
具体原理不知道,是基本类型放栈里,对象放堆里吗?



发表于 2020-09-10 20:32:17 回复(1)
foo0没有触发异常,直接执行finally和后面的语句 foo1触发异常,到catch中执行,因为catch中有return,到执行完finally后重新回到catch执行return,此时return执行整个方法结束,后面代码不再执行
发表于 2020-12-22 19:14:47 回复(0)
明确一点,finally必须执行, foo(0)执行时output += “3”;output += “4”; output 为“34”  
foo(1)执行时先抛出异常执行 output += “2”;然后执行finally里的output += “3”; 此时output 为“3423”  
最后执行return

发表于 2016-01-27 15:00:26 回复(0)
catch里边return 会先执行finally 然后运行return
发表于 2024-02-17 21:34:41 回复(0)