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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王宝龙 中级黑马   /  2012-9-14 14:08  /  1217 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王宝龙 于 2012-9-23 22:14 编辑
  1. class FuShuException extends Exception
  2. {
  3.         
  4. }
  5. class ExceptionA
  6. {
  7.         private double result;
  8.         public void div(int a,int b)throws FuShuException
  9.         {
  10.                 if(b==0)
  11.                 {
  12.                         throw new FuShuException();
  13.                 }
  14.                 result = a/b;
  15.         }
  16.         public double getResult()
  17.         {
  18.                 return result;
  19.         }
  20. }
  21. class ExceptionDemo
  22. {
  23.         public static void main(String [] arge)
  24.         {
  25.                 ExceptionA a = new ExceptionA();
  26.                
  27.                 System.out.println("fun()返回值:"+fun(a));
  28.                 System.out.println("over");
  29.         }
  30.         public static int fun(ExceptionA a)
  31.         {
  32.                 try
  33.                 {
  34.                                 a.div(4,0);//<font color="red">这里如果是(4,1)返回值仍然是2!!!!!不解!!!</font>
  35.                                 System.out.println(a.getResult());
  36.                                 return 1;
  37.                 }
  38.                 catch(FuShuException e)
  39.                 {
  40.                         System.out.println(e.getMessage());
  41.                         System.out.println(e);
  42.                 }
  43.                 finally
  44.                 {
  45.                         return 2;
  46.                 }
  47.         }
  48. }
复制代码
如果这样a.div(4,0)返回值为2。可是这样a.div(4,1)的话返回值还是2为什么不是1呢?这是为什么?谢谢各位帮忙看一下!!

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
因为他先把1取出来放在内存中 然后执行到finally把2取出来放到内存中 2把1覆盖了
回复 使用道具 举报
在try{}catch{}finally{}中finally{}中的内容无论如何都是要执行的,
不管前面try{}中还是catch{}中结果return什么值,到后来都会执行finally{}中的return 2;
所以就这样显示咯。
希望有帮助
回复 使用道具 举报
finally块无论如何都会被执行,除非jvm退出,进程挂掉了。
那么你的代码中有两个return语句,按照先后顺序,finally最后执行return,try中的return的值就被finally中的return给覆盖了。
所以无论传递什么参数都将返回2.
回复 使用道具 举报
因为finally语句是在try或者catch中的return语句之前执行的,所以结果是2,也就是说在正常情况下,finally都会被执行。
如果在catch中程序就return,那么finally就不会被执行,所以,如果try,catch中有控制转移语句,比如return,break和continue,finally会在这些语句执行前先被执行!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马