java - JAVA 中的链式异常设施

标签 java exception

我可以在java中实现链式异常工具

案例1:

public static void main(String[] args) {

    try {
        method1();
    } catch (Exception e) {
        System.out.println("Exception in the main method :: "+e);
    }

}

private static void method1() throws Exception {
    try{
        System.out.println("Inside Try Block"+10/0);
    } catch(ArithmeticException e){
        System.out.println("Exception in method1 :: "+e);
        throw e;
    } finally{
        System.out.println("In FinallY Block");
    }

}

案例2:

public static void main(String[] args) {

    try {
        method1();
    } catch (Exception e) {
        System.out.println("Exception in the main method :: "+e);
    }

}

private static void method1() throws Exception {
    try{
        System.out.println("Inside Try Block"+10/0);
    } catch(ArithmeticException e){
        System.out.println("Exception in method1 :: "+e);
        throw (ArithmeticException)new ArithmeticException().initCause(e);
    } finally{
        System.out.println("In FinallY Block");
    }
}

我得到的输出为

Exception in method1 :: java.lang.ArithmeticException: / by zero
In FinallY Block
Exception in the main method :: java.lang.ArithmeticException: / by zero

我的问题是:

  1. 这两种情况有什么区别吗?
  2. 哪种方法更好?
  3. 为什么有 2 个案例具有相同的目的?

最佳答案

  1. 不同之处在于,在第二种情况下,您将原始 ArithmeticException 异常包装在另一个相同类型的异常中(请参阅下文,了解为什么这是毫无意义的)。

  2. 情况 1 可能是您想要在此处使用的情况,因为您没有扩大异常的含义(到更高的级别)。

  3. 他们没有相同的目的,让我解释一下......

如果将异常设置为原因,则其含义不同。您可以通过将 ArithmeticException 包装在更高级别的异常中来赋予它更大的含义。在这里,您只是将其包装在另一个 ArithmeticException 中,这是没有意义的。

您可能需要一个原因的情况是,例如,当您尝试从 Web 服务获取一些数据时:发送 HTTP 请求的低级方法抛出一些 SocketExceptionHttpException,然后将它们包装在一些更高级别的异常中,描述无法加载的资源(例如)。

关于java - JAVA 中的链式异常设施,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22510851/

相关文章:

java - 在Java中,Spring无需任何脚本即可维护数据库

java - 从键盘读取数据时出现异常

Java:在我的程序中将文件数据转换为可用数据时遇到问题。有小费吗?

java - 如何对多个元素上的 Vector<Vector<String>> 进行排序,将子项分组在一起?

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

java - where子句中的hql问题

java - 用一个斜杠替换 url 中的所有正斜杠

c++ - 通过在构造函数主体之前抛出异常来防止构造

jquery - 在 ajax 请求上接收服务器异常消息的最佳实践

java - Android - 需要 Activity 但不想要 Activity ?