在捕获块中,除以零时未抛出异常。

20 浏览
0 Comments

在捕获块中,除以零时未抛出异常。

在使用Java中的异常处理时,我注意到在Java的catch块中进行非法运行时操作时不会抛出任何异常。\n这是语言的一个bug还是我漏掉了什么?\n有人能帮忙看一下吗?为什么catch块中没有抛出异常。\n

public class DivideDemo {
    @SuppressWarnings("finally")
    public static int divide(int a, int b){
    try{
       a = a/b;
    }
    catch(ArithmeticException e){
       System.out.println("重新计算值");
       /* 在下面的代码中期望出现异常 */
       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("除法运算");
     System.out.println(divide(100,0));
  }
}

0
0 Comments

异常在catch块中被捕获时没有抛出的原因是,finally块中有一个return语句。这个return语句会有效地吞噬异常,并用返回的值"覆盖它"。

这个问题的解决方法是,避免在finally块中使用return语句。在finally块中应该只执行清理工作,而不是返回任何值。

Java语言允许在finally块中使用return语句的原因可能是为了给开发者更大的灵活性。在某些情况下,有条件的返回语句可能符合某个特定的需求或契约。然而,这种设计决策可能会导致潜在的问题和错误使用。因此,开发者应该避免在finally块中使用return语句,以确保程序的正确性和可维护性。

最好的做法是避免在finally块中使用return语句,以免引发不必要的错误和混乱。如果确实需要在finally块中返回值,应该重新考虑程序的设计,以避免使用这种结构。

总结起来,异常在catch块中没有被抛出的原因是在finally块中有一个return语句,解决方法是避免在finally块中使用return语句,以确保程序的正确性和可维护性。

0