A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余银桂   /  2012-6-22 23:32  /  4223 人查看  /  29 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

丁二跃 发表于 2012-6-23 11:36
黄老大 这个也不能说明 返回 1 然后2 又覆盖了啊

执行完 arr[0]=1 后数组变成 {1,5}

昨晚翻阅了一下,看到有一个地方是这么讲解的。

try 中的return语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行finally语句后才真正开始返回。
回复 使用道具 举报
孙峰 黑马帝 2012-6-23 11:54:21
22#
黄奕豪 发表于 2012-6-23 11:23
public class  Test5

{

斑竹不给分 抗议 抗议:@
回复 使用道具 举报
只能return返回一次,应为执行return 时,函数就结束了。try中的return没有返回结果,finally中的才返回结果
回复 使用道具 举报
孙峰 发表于 2012-6-23 11:54
斑竹不给分 抗议 抗议

哥,我错了!!可是你看看,哪个是重点啊?
finally 代码块中的代码在一般情况下是一定会执行的。   这里主要是对一些系统资源占用的终止。 因为该代码块和try 一起使用时,如果发生异常,则部分系统资源的占用就无法释放, 此时 就是finally 代码块发挥作用的时候了。      当然也不是肯定都会执行,比如 此前有语句:System.exit(0);  系统退出语句,JVW结束,也就执行不到了。
回复 使用道具 举报
return 1 应该没有执行  执行了就是返回值了结束了 应该是直接跳接到finally执行其中语句。 直接赋予get()方法return2

finally方法毕老师的视频里有讲噢~  finally 利用它一定会执行到它代码块的特点,在try catch中有异常时用finally对停止系统资源占用。不然有异常了部分系统资源会被占有,卡在那里。
回复 使用道具 举报
孙峰 黑马帝 2012-6-23 13:58:34
26#
黄奕豪 发表于 2012-6-23 11:57
哥,我错了!!可是你看看,哪个是重点啊?
finally 代码块中的代码在一般情况下是一定会执行的。   这里 ...

那哥们不是问finally的主要作用了嘛
回复 使用道具 举报
嘿嘿,我在做笔试题的时候有一个这样的问题:try{}catch{}中的finally{}中的代码会不会被执行,如果会是在return前还是return 后
答案是  会被执行,return前执行,那么这样的话你是不是会明白一点呢?
public int  get()



      {



            try



            {



                  return 1 ;



            }



            finally



            {



                  return 2 ;



            }



      }
你这个方法在执行的时候首先执行到try里边的时候执行到在执行到return语句的时候他会提前执行 finally中的语句 刚好你里边写了一个return 2; return的意思是跳出这个方法 所以你收到的返回值是2;也就是说你try中的return 根本没有被执行,你如果改成
        try{
                        return 1;       
                }finally{
                        System.out.println("finally");
                }
你试试,他会先输出finally然后给你返回一个1,我改完以后跟你的区别就在于,你在finally中直接使用return退出了方法而我没有 所以我try中的return 1还是会被执行的。
回复 使用道具 举报
  public int[]  get()

      {
             //原值4和5,打印的是1和2,说明这两个代码都执行了,你的那个输出2是被覆盖的!
            int[] arr = {4,5};
            try

            {
                    arr[0]=1;
                  return arr ;

            }

            finally

            {
                      arr[1]=2;
                  return arr ;

            }

      }
我想给你说下 ,你可以把try中的 return 去掉试试,结果还是会一样的  应为finally里边的代码只会在return前执行,所以说你try中的return arr;形同虚设

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
孙峰 黑马帝 2012-6-23 18:42:04
29#
黄奕豪 发表于 2012-6-23 11:57
哥,我错了!!可是你看看,哪个是重点啊?
finally 代码块中的代码在一般情况下是一定会执行的。   这里 ...

:kiss:{:3_51:}
回复 使用道具 举报
有些异常如果不处理,也就不会继续下去了。即程序从catch里改变控制流,不会执行后面的语句。加了finally,可以保证即使因为异常,后面的代码不会被执行,但是finally里面的语句还是会执行,这样可以释放一些申请的资源~或者做一些其他工具,比如作profiling统计等。所以在try{}中的finally是一定会执行的。为了程序的健壮性,不能在用户使用的时候在一些突发小异常的照成程序直接终止。

回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马