处理异常的更好方法
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.
}
}
比如说,我有一个函数可以抛出 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.
}
}