首页 > 试题广场 >

下面程序的输出结果是?

[单选题]
下面程序的输出结果是?
package algorithms.com.guan.javajicu;  
public class TestDemo {  
    public static String output ="";  
    public static void foo(int i){  
       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
  • 34234
  • 3423
解题要点:
1、try中没有抛出异常,则catch语句不执行,如果有finally语句,则接着执行finally语句,继而接着执行finally之后的语句;
2、try中抛出异常,有匹配的catch语句,则catch语句捕获,如果catch中有return语句,则要在finally执行后再执行;
发表于 2016-10-11 14:27:14 回复(18)
void函数可以return空值,所以代码没错
第一次try没执行,所以没有异常抛出,程序继续,finally必须执行,try外部代码执行,output=“34”
第二次try执行,抛出异常,程序中断,执行catch,最后执行finally,程序结束,所以output=3423“
发表于 2015-07-31 10:17:29 回复(8)
package algorithms.com.guan.javajicu; “ javajicu ”java基础吗?出题人好像有点大舌头~
发表于 2017-06-21 20:54:39 回复(3)
Catch 语句中有return语句,所以不在执行4
发表于 2015-11-17 15:01:56 回复(0)
void函数可以return空值,所以代码没错
foo(0):第一次try没执行,所以没有异常抛出,程序继续,finally必须执行,try外部代码执行,output=“34”
foo(1):第二次try执行,抛出异常,程序中断,执行catch,然后执行finally,最后执行return,程序结束,所以output=3423“
发表于 2015-08-22 23:58:37 回复(1)
如果题目变换一下,加一个返回类型

package algorithms.com.guan.javajicu; 
public class TestDemo { 
    public static String output =""; 
    public static String foo(int i){ 
       try{ 
           if(i == 1){ 
              thrownewException(); 
           } 
       }catch(Exception e){ 
           output += "2"; 
           return output
       }finally{ 
           output += "3"; 
       } 
       output += "4"; 

      return output;
    } 
    
    public static void main(String[] args) { 
        System.out.println( foo(0)); 
        System.out.println(  foo(1)); 
System.out.println(output);
    } 
}
输出结果就是:
34
342
3423
编辑于 2015-09-08 12:48:04 回复(7)
D catch到异常后先执行finally块在执行catch中的return语句
编辑于 2018-09-20 10:02:05 回复(14)
不管是否try...catch,finally都会被执行。当try...catch中有return的话,finally后会执行try...catch中的return,然后不再执行后续语句。
发表于 2017-06-15 15:33:58 回复(0)
finally字句中的语句总会执行,即使有return语句,也是在return之前执行。
发表于 2015-12-10 21:35:53 回复(0)
D,foo(0)的时候先finally+3再+4,foo(1)的时候异常被catch,先catch+2再finally+3然后就return了
所以是3423
发表于 2015-08-02 19:43:39 回复(0)
当try/catch语句有return,finally语句没时,执行完finally语句,在返回执行try/catch语句中return;
foo(0)时,没抛出异常,执行finally语句,输出“34”;
foo(1)时,抛出异常,进入catch语句,在进入finally语句,之后再执行catch语句中return;输出“23”;
所以输出“3423”;
编辑于 2018-11-22 17:46:14 回复(0)
答案选 : D
当 foo(0)时, 没有抛出异常, try块执行完执行得时finally块, 执行完finally再执行外部 output += "4"; , 此时 output = "34";
当foo(1)时, try块抛出异常, try执行完执行catch块, 但在执行catch块得return时, 会立即跑去执行finally块, finally执行完会立即执行return, 此时外部代码  output += "4";  不执行, 此时 output = "3423";
发表于 2018-10-06 10:48:47 回复(0)
foo(0);没有异常抛出;output=34;
foo(1); 抛出异常,执行catch,然后执行finally,最后catch()中return;output =3423;
这里我没注意catch中的return
发表于 2018-09-21 14:16:25 回复(0)
catch中有return ,就先不执行return,执行完finally在执行return
发表于 2017-11-22 00:28:10 回复(1)
无论是否抛出异常、无论从哪开始return、finally总会在treturn前执行、所以是3423
发表于 2015-10-13 12:03:05 回复(1)
抛出异常后,不会执行finally后的其它语句
发表于 2022-05-21 16:55:45 回复(0)

虽然被catch了 之后的程序仍不会运行

发表于 2019-09-26 14:37:43 回复(0)
阿西吧,没有注意到return,下次要注意细节问题。
发表于 2019-09-02 23:32:52 回复(0)

当try中抛出异常的时候,先执行catch中的语句,如果catch中有return时,则return需要在finally之后执行


当try中没有抛出异常的时候,则不需要执行catch中的内容,直接执行finally中的内容,然后再接着往后执行

发表于 2019-09-01 08:05:51 回复(0)
catch没看到里面有一个return  如果没有return的话就是选b
发表于 2019-08-28 23:06:20 回复(0)