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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 左耳的鱼 中级黑马   /  2013-7-16 21:16  /  1162 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 左耳的鱼 于 2013-7-16 23:51 编辑

public class ExceptionTest{
  public double div(double a, double b){
    try{
      return a/b;
    }catch(Exception e){
      System.out.println(“Exception thrown”);
    }finally{
      System.out.println(“Release resources.”);
    }
  }
  public static void main(String[] args){
    ExceptionTest et = new ExceptionTest();
    et.div(1, 2);
    et.div(3.4, 0);
  }
}
//为什么编译不成功,异常没有捕获吗???????        

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 神马都是浮云

查看全部评分

5 个回复

倒序浏览
看代码的第一直觉是缺少return语句
回复 使用道具 举报
没有返回值。try中出了异常的话,catch代码块中没有返回值。
回复 使用道具 举报
编译器认为try块中是有可能产生异常操作的,也就是说在return语句之前如果出现异常的话,那么return语句根本没有机会得到执行,所以编译器会认为缺少return语句,在catch或者finally模块中添加一个return 语句就行了。
还有就是你的代码中Exception thrown  Release resources 两边的引号是中文标点符号。
我把你的代码稍微改了一下,你参考下吧。
  1. public class ExceptionTest
  2. {
  3.        
  4.                   public double div(double a, double b)
  5.                   {
  6.                     try
  7.                     {
  8.                       return a/b;
  9.                     }
  10.                     catch(Exception e)
  11.                     {       
  12.                             e.printStackTrace();
  13.                       System.out.println("Exception thrown");
  14.                       return -1;
  15.                     }
  16.                     finally
  17.                     {
  18.                       System.out.println("Release resources");
  19.                     }
  20.                   }
  21.                   public static void main(String[] args)
  22.                   {
  23.                     ExceptionTest et = new ExceptionTest();
  24.                     System.out.println(et.div(1, 2));
  25.                     System.out.println(et.div(3.4, 0));
  26.                     
  27.                   }
  28.                
  29.                 //为什么编译不成功,异常没有捕获吗???????        

  30. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
代码中有两处错误:
1, finally 里没有return,或者将return a/b;写到finally体后,总之要保证程序无乱如何都要有返回值.
2, System.out.println(“Exception thrown”);里面的双引号是英文的双引号而不是中文的双引号.
把上面两处修改后就可以了.

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你的try{}catch(){}finally{}中的return语句错误的,程序一旦遇到return语句就将当前执行的函数结束掉,而try{}catch(){}finally{}语句后没有return语句这样编译器认为没有返回值
  1. public class ExceptionTest{
  2.           public double div(double a, double b){
  3.                   double res = 0;
  4.             try{
  5.               res = a/b;
  6.             }catch(Exception e){
  7.               System.out.println("Exception thrown");
  8.             }finally{
  9.               System.out.println("Release resources.");
  10.             }
  11.             return res;
  12.           }
  13.           public static void main(String[] args){
  14.             ExceptionTest et = new ExceptionTest();
  15.             et.div(1, 2);
  16.             et.div(3.4, 0);
  17.           }
  18.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马