捕获异常时,为什么我们使用Exceptions子类作为o / p清楚地给出了我们确切的异常? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了捕获异常时,为什么我们使用Exceptions子类作为o / p清楚地给出了我们确切的异常? [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

public class Test{  
  public static void main(String args[]){  
  try{  
   int data=25/0;  
   System.out.println(data);  
  }  
  catch( ArithmeticException e)
       {
         System.out.println(e);
       }  
  }  
}  

o / p:java.lang.ArithmeticException:/ by零

在这段代码中,即使我使用ArithmaticException类或直接使用Exception类捕获异常,o / p也是相同的。那么为什么我们在不同的catch语句中使用子类而不是每次都直接使用Exception类?

答案

你永远不应该使用catch(Exception),因为它不仅会捕获你感兴趣的异常,而且还会无意中捕获可能发生的任何RuntimeException(因为RuntimeException扩展了Exception)

另一答案

因为有时您只想捕获ArithmeticException或NumberFormatException。 Exception类包含ArithmeticException,NumberFormatException和其他Exception子类。

另一答案

您可以根据错误显示包含更多信息的消息,如果错误不在预测范围内,则可以显示通用消息。

回答评论中的问题:

try {
    int data = 25 / 0;
    System.out.println(data);
}
catch (ArithmeticException e) {
    System.out.println("Wrong numbers to process");
}
catch (IOException e) {
    System.out.println("Other error message here.");
}
catch (Exception e) {
    /*Here i dont know possible errors in my code, just show a generic message and try resolve the problem for your client.*/ 
     System.out.println("Something wrong./n" + e.getMessage()); 
}

以上是关于捕获异常时,为什么我们使用Exceptions子类作为o / p清楚地给出了我们确切的异常? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥java中Exception的对象能够获取子类的信息.

异常的处理

Sonarqube - 避免捕获通用异常

Ruby Exceptions - 为什么“else”?

Flask 学习-69.捕获异常钩子函数errorhandler

如何记录“捕获的”异常?