黑马程序员技术交流社区

标题: 关于异常处理语句的一个问题 [打印本页]

作者: paozhuanyinyu    时间: 2014-8-17 19:32
标题: 关于异常处理语句的一个问题
用代码证明,在try中写了return,后面又写了finally,是先执行return还是先执行fianlly?

作者: 玥夜    时间: 2014-8-17 20:47
本帖最后由 玥夜 于 2014-8-17 20:49 编辑

这个 try里面一般没有return吧   try是用来包围语句的 处理语句有异常的      不是用来包围方法的  return 是写在方法里面的

作者: justin1258    时间: 2014-8-17 20:57
应该是先执行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:11
本帖最后由 怀念黑海岸 于 2014-8-17 23:13 编辑

finally,你写下就可以了,在try中抛出一个运行时异常,catch中的处理语句就是return语句,然后finally中定义一条打印语句,按理说产生异常后被catch捕获的话那么要运行处理语句,但是如果finally中的这条语句被执行了就说明finally中的语句是必须被执行的。
作者: masai158    时间: 2014-8-17 23:16
上次有人问过一样的答案。
我的答题是。 当 try里面发现下一句是 return 的话。则马上跳转到 finally 的代码进行运行。如果当 finally 也有 return 则返回 finally 的 return....如果 当 finally 执行完毕以后。也没有发现 return的话。则会返回跑到 try中,执行 try的  return。。




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