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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王亚亚 中级黑马   /  2014-6-3 11:16  /  1308 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class TestD {
  2.         public static void main(String[] args) {
  3.                
  4.         System.out.println(ex());
  5.                
  6.         }
  7.         public static String  ex(){
  8.                 String a = "null";
  9.                 try{
  10.                        
  11.                         throw new Exception();
  12.                
  13.                 }catch (Exception e){
  14.                         a = "catch";
  15.                         return a;
  16.                        
  17.                 }finally {
  18.                         a="finally";
  19.                         return a;
  20.                 }
  21.         }
  22. }
复制代码

首先,主函数调用方法ex();然后执行try语句,抛出一个异常,异常被catch捕获,执行catch中的语句,执行完a = "catch";之后,a 的值变为catch,然后发现下一条语句是return,因此直接执行fianlly语句,然后执行finally语句中的return语句结束方法。所以结果为finally。
  1. public class TestD {
  2.         public static void main(String[] args) {
  3.                
  4.         System.out.println(ex());
  5.                
  6.         }
  7.         public static String  ex(){
  8.                 String a = "null";
  9.                 try{
  10.                        
  11.                         throw new Exception();
  12.                
  13.                 }catch (Exception e){
  14.                         a = "catch";
  15.                         return a;
  16.                        
  17.                 }finally {
  18.                         a="finally";
  19.                        
  20.                 }
  21.         }
  22. }
复制代码

在这段代码中执行顺序是首先,主函数调用方法ex();然后执行try语句,抛出一个异常,异常被catch捕获,执行catch中的语句,执行完a = "catch";之后,a 的值变为catch,然后发现下一条语句是return,直接执行finally语句,然后执行a=“finally”;执行之后执行catch中的return,这里请注意,这里返回的是catch中的a值,也就是返回值是catch,原因是当执行到程序return语句时,发现是返回语句,但是finally必须被执行,所以这里return语句被暂停,执行finally语句,执行完之后,返回暂停的语句,所以这里的a值并没有被改变,只是执行的时间不同。还是catch。

评分

参与人数 1黑马币 +5 收起 理由
dede668 + 5

查看全部评分

10 个回复

倒序浏览
说的比较详细了不错;P
回复 使用道具 举报 1 0
恩 好贴 又弄懂了一个问题

回复 使用道具 举报 1 0
受教了 一直搞不懂
回复 使用道具 举报 1 0
说的不错,学习了
回复 使用道具 举报
受教了,finally中的语句都在return语句前面执行
回复 使用道具 举报
dede668 来自手机 初级黑马 2014-6-3 21:35:06
7#
很不错,受教了
回复 使用道具 举报
很好,很牛逼
回复 使用道具 举报
受教了,值得学习
回复 使用道具 举报
恩恩 讲解的很透彻,只是我还有一个疑问:finally和return,到底是谁先执行呢?照你这么分析,是finally先执行对吧?
回复 使用道具 举报
模拟的很详细
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马