在catch块中没有抛出异常的异常

时间:2012-10-16 18:35:43

标签: java exception-handling divide-by-zero

在Java中使用异常处理时,我注意到没有异常被抛出 Java中的 catch 块正在进行一些非法的运行时操作。

这是语言中的错误还是我错过了什么? 有人可以调查一下 - 因为为什么没有从catch块中抛出异常。

public class DivideDemo {

    @SuppressWarnings("finally")

    public static int divide(int a, int b){

    try{
       a = a/b;
    }
    catch(ArithmeticException e){
       System.out.println("Recomputing value");

       /* excepting an exception in the code below*/
       b=0;
       a = a/b;
       System.out.println(a);
    }
    finally{
      System.out.println("hi");
      return a;
    }
  }    
  public static void main(String[] args) {
     System.out.println("Dividing two nos");
     System.out.println(divide(100,0));
  }

}

1 个答案:

答案 0 :(得分:12)

  

这是语言中的错误还是我错过了什么?

这是因为您的return区块中包含finally语句:

finally {
  System.out.println("hi");
  return a;
}

这个return语句有效地吞下了异常,“覆盖它”并返回了值。

另见