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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李前进 中级黑马   /  2014-3-28 17:43  /  1120 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在try中写了return,后面又写了finally,是先执行return还是先执行fianlly?

7 个回复

倒序浏览
public class Test5 {

       
        public static void main(String[] args) {
                //调用test方法并输出
                System.out.println("test:"+test());
        }
        //创建个有返回的方法来证明
        public static int test(){
                //定义一个变量a
                int a = 1;
                //证明try后面有return和finally先执行谁
                try{
                        System.out.println("try:"+a);
                        //返回a的值
                        return a;
                }finally{
                        //从新定义一个a的值
                        a=5;
                        System.out.println("finally:"+a);
                }
        }

}
你可以自己运行下试试

评分

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

查看全部评分

回复 使用道具 举报
执行完  return   就不执行 finally   了
回复 使用道具 举报
一般的情况下,finally后是一定要执行的铁打不动的.....
对于try中有return的,是先finally,后return
过去在哪看过个比较给力的代码段,似乎是下面这样的
  1. public class Test {

  2.   public static void main(String[] args) throws Exception {
  3.     System.out.println(fin());
  4.   }

  5.   static int fin() throws Exception {
  6.     try {
  7.       System.out.println("我要被执行");
  8.       //System.exit(1);//强制退出后是无法return,finally什么的
  9.       System.out.println("我能被执行?(1)");
  10.       return 0;
  11.     } finally {
  12.       System.out.println("我能被执行?");
  13.     }
  14.   }
  15. }
复制代码


执行结果:我要被执行
我能被执行?(1)
我能被执行?
0

加上注释部分,执行结果:我要被执行

评分

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

查看全部评分

回复 使用道具 举报 1 0
先执行try中的代码,再执行finally中代码。要是都有return,那么返回的是finally中的值。如下代码
  1. public static void main(String[] args){
  2.                 //打印结果为19,说明先执行了try中的代码,将9赋值给x,再执行finally中代码,跟10相加。最终方法返回的是finally中return的结果
  3.                 System.out.println(get());
  4.         }
  5.         public static int get(){
  6.                 int x = 0 ;
  7.                 try {
  8.                         x = 9 ;
  9.                         return 6 ;               
  10.                 } catch (Exception e) {
  11.                         e.toString();
  12.                 }
  13.                 finally{
  14.                         return 10+ 9 ;
  15.                 }
  16.         }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 xietansheng 于 2014-3-29 00:51 编辑
  1. class Demo02 {

  2.         public static void main(String[] args) {
  3.                 String str = method_01();
  4.                 System.out.println(str);
  5.         }
  6.         
  7.         public static String method_01() {
  8.                 try {
  9.                         System.out.println("method_01() 方法被调用");
  10.                         return method_02();
  11.                 } finally {
  12.                         System.out.println("method_01() finally { }");
  13.                 }
  14.         }
  15.         
  16.         public static String method_02() {
  17.                 System.out.println("method_02() 方法被调用");
  18.                 return "abc";
  19.         }
  20.         
  21. }
复制代码
结果为:
method_01() 方法被调用
method_02() 方法被调用
method_01() finally { }
abc

说明:
先计算好需要被return的值等待return,等到finally{ } 执行完后,在把已经计算好的值return。


评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
finally在return之前执行
public class Test{

        pulic static void main(){
                System.out.println(new Test().test);
        }
        static int test(){
          int x = 1;
          try{
                return x;
          }finally{
                ++x;
          }
        }

}


结果为1;主函数调用test时,首先获得了结果,然后再将逻辑返回到主函数中,所以说先执行的fianlly;

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
有一个很好判断的方法,记住,finally是必须要执行的!!!不论是在try还是catch中,只要有结束该方法函数的语句,在执行该语句之前就会先执行finally中的语句,再返回继续执行结束语句。如果finally中有结束方法的语句,就会直接结束该方法的调用。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马