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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩军博 黑马帝   /  2011-12-5 14:00  /  2865 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 韩军博 于 2011-12-5 22:50 编辑

try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

11 个回复

倒序浏览
finally中的语句一定会执行,而且都是在try {}中代码执行完毕后执行
try语句其实是这样的.try catch是执行完try时,如果出现异常则在catch里捕获,并声明
但是如果没发生异常,catch是不执行的
但是try finally是在执行完try后,不管是否出现异常都会执行,只要执行try了  就会执行finally  就算执行完try方法会结束  finally也会执行
除非退出虚拟机   finally一般会在io时用来释放资源

希望对你有所帮助

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
在java里面  try {}里面的return语句是在finally {}后面执行。
finally {} 除了System.exit(0); 不执行,其他的情况下都要执行。
一般我可以用Eclipse Debug 下就可以知道结果。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
有return的时候也会执行是在执行完return之后在执行,不管怎样都是先执行完try代码块之后的才执行finally的,除非是遇到System.exit()的时候就不执行,因为System.exit()是推出虚拟机了。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
我也来学习一下,
回复 使用道具 举报
许邦存 来自手机 黑马帝 2011-12-5 15:10:41
地板
finally会被执行,在return之后,当涉及到break和continue也是如此,因为finally总会被执行所以在一个方法中可以从多个点返回,保证清理工作仍然会执行,finally一般用来清理资源,释放内存。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
常登凯 黑马帝 2011-12-5 15:43:47
7#
这么多人只有一个人回答正确。。诶,其实这种问题有必要问嘛?自己debug跟一下不就知道了?
如果try块里有return语句的话,系统会先执行finally块里的语句然后再执行try块中的return语句返回结果
不相信的同学可以自己随便写一个debug一下么。。。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
try{}里面有return语句,JVM运行的时候会记录下这个return语句,接着去执行finally{}里面的语句,finally{}里面有return语句,则最终是以finally{}里面的语句为最终的返回,若是没有,则执行完finally{}之后回到try{}中的return语句。

评分

参与人数 1技术分 +1 收起 理由
admin + 1 答题有奖!

查看全部评分

回复 使用道具 举报
段波 黑马帝 2011-12-5 19:25:33
9#
  1. public class Test  {


  2.         public String Test1() {
  3.         String str = "aa ";
  4.         try {
  5.         str = "try中的字符串";
  6.         System.out.println(str);
  7.         return str;
  8.         } finally {
  9.         str = "finally 中的字符串";
  10.         System.out.println(str);
  11.         //return str;
  12.         }
  13.         }
  14.         public static void main(String[] args) {
  15.         Test t = new Test();
  16.        
  17.         System.out.println(t.Test1());
  18.         }

  19.         }
复制代码
先执行try 中的代码一直到System.out.println(str);这一行,然后转到finally中执行再回到try中继续执行return str这一行。如果finally中有return语句,那么就不会再回到try语句块中,直接返回了。你运行一直这段代码就很清楚了!

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
fly51888 黑马帝 2011-12-5 20:24:32
10#
本帖最后由 fly51888 于 2011-12-5 20:26 编辑

try{
   *****
}catch(){
   ******
}finally{
  *****
}
这是一个标准的模板,1,如果不产生异常,则会先执行try{}语句块里的内容,如果有return语句则先执行return语句后,然后再执行finally{}中的语句。
2,如果产生异常,则会执行catch(){}语句块的内容,然后再执行finally{}中的语句。
public class App {
    int i = 0;
        public static void main(String[] args) {
       
                  App app = new App();
                  int temp = app.show();
                 
                  System.out.println("after:"+temp);
        }
       
        public int show(){
                try{
                        System.out.println("try");
                        return  ++i;
                }catch(Exception e){
                        System.out.println("catch");
                }finally{
                        System.out.println("before:"+(++i));
                }
                return i;
        }
}
运行上述代码的结果为:
try
before:2
after:1
可以得出先执行return然后再执行finally语句块。
回复 使用道具 举报
fly51888 黑马帝 2011-12-5 20:27:13
11#
Francis-Yu 发表于 2011-12-5 18:39
try{}里面有return语句,JVM运行的时候会记录下这个return语句,接着去执行finally{}里面的语句,finally{} ...

小子,你好啊! 哈哈……

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
武超 黑马帝 2011-12-5 21:18:14
12#
finally()中的语句是一定会被执行的,先要执行完try中是语句,包括return。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马