处理异常的更好方法

Better way to handle exception

比如说,我有一个函数可以抛出 3 种类型的异常 e1、e2 和 e3。所以,在这个函数中有两种处理异常的方法。哪种方法更好,为什么?示例:-

public void func() {

   block1 starts

   block1 ends
   e1 can thrown from block1

   block2 starts

   block2 ends
   e2 can thrown from block2

   block3 starts

   block3 ends
   e3 can thrown from block3
}

所以,现在我可以通过两种方式处理异常:- 1. 为 3 个不同的块放置 3 个不同的 try catch。 2. 对所有 3 个块进行一次尝试,并对每个异常进行 3 次捕获。

哪种方法更好?

这取决于Exception的效果。

  • 如果所有异常都不影响进一步处理,则将每个异常点放在单独的 try-catch 块中。这样,如果发生一个异常,那么您可以执行不受此异常影响的代码行。
  • 将影响进一步处理的所有异常放在一个 try-catch 块中,以获得更好的可见性和可读性。通过这样做,您还可以删除额外的 try-catch 块。否则,您将需要创建嵌套的 try-catch 块和许多复杂的逻辑(因为在这种情况下您必须停止进一步执行)。

如果你想以不同的方式处理每个异常,那么使用多重捕获,但如果你只想捕获异常以打印堆栈跟踪并继续执行,那么使用多重异常捕获。

像这样最灵活:

public void block1() throws e1 {
    try {
     ...
    } catch (e12) {
       throw new e1(e12);
    }
}

public void block2() throws e2 {
    similar to block1
}

public void block3() throws e3 {
    similar to block1
}

public void func() {
    try {
       block1();
       block2();
       block3();
    } catch (stuff) {
       stuff if you need it.
    }
}