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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© paozhuanyinyu 中级黑马   /  2014-8-17 19:32  /  1402 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

用代码证明,在try中写了return,后面又写了finally,是先执行return还是先执行fianlly?

4 个回复

倒序浏览
本帖最后由 玥夜 于 2014-8-17 20:49 编辑

这个 try里面一般没有return吧   try是用来包围语句的 处理语句有异常的      不是用来包围方法的  return 是写在方法里面的
回复 使用道具 举报
应该是先执行try里的return,再执行finally。没有直接证明,但是这里有段代码可以间接证明:
  1. public class Test {

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

  5.         @SuppressWarnings("finally")
  6.         static int test(){
  7.                 try {
  8.                         return 0;
  9.                 }finally{
  10.                         return 1;
  11.                 }
  12.         }
  13. }
复制代码

输出的结果是1,而不是0。
从这里可以间接判断先执行了try里的return语句,然后执行finally里的return语句,而且finally里的return覆盖了try里面结果。
回复 使用道具 举报
本帖最后由 怀念黑海岸 于 2014-8-17 23:13 编辑

finally,你写下就可以了,在try中抛出一个运行时异常,catch中的处理语句就是return语句,然后finally中定义一条打印语句,按理说产生异常后被catch捕获的话那么要运行处理语句,但是如果finally中的这条语句被执行了就说明finally中的语句是必须被执行的。
回复 使用道具 举报
上次有人问过一样的答案。
我的答题是。 当 try里面发现下一句是 return 的话。则马上跳转到 finally 的代码进行运行。如果当 finally 也有 return 则返回 finally 的 return....如果 当 finally 执行完毕以后。也没有发现 return的话。则会返回跑到 try中,执行 try的  return。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马