用java编写顶级异常处理程序的最佳方法是什么

用java编写顶级异常处理程序的最佳方法是什么,java,exception,Java,Exception,我有一个顶级异常处理程序方法,它必须处理多个RuntimeException。我需要以不同的方式处理它们,并为每一个返回不同的响应。一系列的if-elses比try-catch好吗 public void handler(Exception e) { if (e instanceOf AException) { } else if (e instanceOf BException) { } else if (e instanceOf CException) {

我有一个顶级异常处理程序方法,它必须处理多个RuntimeException。我需要以不同的方式处理它们,并为每一个返回不同的响应。一系列的if-elses比try-catch好吗

public void handler(Exception e) {
    if (e instanceOf AException) {

    } else if (e instanceOf BException) {

    } else if (e instanceOf CException) {

    }
    ......
    ......
}


尽管我认为第二种方法确实是对语言的滥用,但它确实有检查捕获顺序的好处,因为如果您在
subassofaeexception
之前尝试捕获
aeexception
,它将不会编译,因为
subassofaeexception
子句将无法访问;对if/else链没有这样的检查,这是真的。我正在寻找编写顶级处理程序的最佳方法。在oop语言中,instanceOf并不是不受欢迎的。几乎“最佳方式”总是基于观点,这些问题将就此结束。顶级处理程序基于异常类型进行操作的整个概念似乎是错误的。一个顶级管理者真正应该做的唯一一件事就是说“哎呀,出了什么事了”,阻止整个世界崩溃。如果您想做特定的事情,请在代码中更具体的位置处理它们。我的Java在这一点上有点生疏,但是当您的
处理程序(e)
函数重新抛出异常对象时,原始
throw
附加到异常对象的堆栈跟踪信息会发生什么变化?
public void handler(Exception e) {
    try {
        throw e;
    } catch (AException a) {}
    } catch (BException b) {}
    ......
    ......
}