黑马程序员技术交流社区

标题: 给大家出道题,运算后的结果是多少?并注明为什么! [打印本页]

作者: ︶喂〆快到碗里    时间: 2014-8-31 20:15
标题: 给大家出道题,运算后的结果是多少?并注明为什么!
本帖最后由 ︶喂〆快到碗里 于 2014-9-7 21:33 编辑

class Test
{
        public static String output="";
        public static void foo(int i)
        {
                try
                {
                        if(i==1){
                                throw new RuntimeException();
                                }
                        output+="1";
                }
                catch (RuntimeException e)
                {
                        output+="2";
                        return;
                }
                finally
                {
                        output+="3";
                }
                output+="4";
        }
        public static void main(String[] args)
        {
                foo(0);
                System.out.println(output);
                foo(1);
                System.out.println(output);
        }
}


作者: 潘多拉    时间: 2014-8-31 21:31
foo(0)=8,foo(1)=6,因为0不等于1所以不抛出异常,执行一次0+1,不执行catch,finally执行,最后一句也执行,所以是0+1+3+4=8;foo(1),满足条件抛出异常,所以,1+1不执行,执行catch,因为有return所以直接返回值,下面的+4不执行,但因为有finally所以再加3,所以是1+2+3=6
作者: 潘多拉    时间: 2014-8-31 21:32
不知道对不对啊
作者: 夜班心桥    时间: 2014-8-31 22:11
134,传递参数0时,不会抛出运行时异常。所以执行完try里面的 output+="1";语句,接着执行finally和语句块外面的语句。
13423,传递参数1时,抛出异常,执行catch中的  output+="2";无论是否捕捉到异常,都需要执行finally里面语句块。如果捕捉到异常,finally之外的语句将不被执行。所以执行output+="3"。
【另异常请参考:http://bbs.itheima.com/thread-140825-1-1.html

作者: 七弟    时间: 2014-8-31 22:32
路过 凑热闹
作者: 天邃任我桓    时间: 2014-8-31 22:58
还没学到,暂时一知半解
作者: 好听就好    时间: 2014-8-31 23:15
因为要打印的结果output是static String类型的。所以output在程序运行时,一直存在。String字符串相加,只是将字符串链接。
foo(0)。无异常,程序执行try--》finally。try结果output=“1”----》finally结果output=“134”
foo(1)。异常,   程序执行try--catch---finally。执行try时,先抛出异常,后边output+="1";不执行。然后,catch,结果:output=“1342”;虽然有return,但是有finally语句,所以仍然执行finally语句。结果output=“13423”。执行完finally后,立刻转到catch中的return。程序结束。
细节可能不足,请酌情采纳。另外推荐搜索一下:try catch  finally语句执行顺序,try catch finally中带return语句的执行顺序。

作者: 姠佐メ亾佑つ    时间: 2014-8-31 23:38
楼上的注意《  public static String output="";》中的关键字”String“   
结果应该是 :
134

13423
作者: 迷失的独白    时间: 2014-9-1 00:02
134(不等于1,加1,执行finally加3,往下执行加4)
13423(等于1,捕获,加2,执行finally加3,结束)
作者: 梧桐树下    时间: 2014-9-1 00:14
134'13423视频里的题
作者: ︶喂〆快到碗里    时间: 2014-9-7 21:34
姠佐メ亾佑つ 发表于 2014-8-31 23:38
楼上的注意《  public static String output="";》中的关键字”String“   
结果应该是 :
134

恩!关键就是static  String




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2