我确信你们都知道Java强制执行一个非常严格的错误处理模式,任何异常都必须通过try catch块或使用throws关键字声明一个方法来处理。 (我可能会加上我真的喜欢它完成的方式)
说完了;我正在努力的是决定在各种方法中处理错误的正确方法是什么。来自C#/ VB.NET背景我以前总是严格遵守在堆栈最底层处理错误(除了最具体的情况之外的所有情况),但我不相信这是Java中最好的方法。
有人可以就此提供任何意见吗?什么是最佳做法?如何决定是否应该在方法之外抛出异常或在内部处理它(显然有些情况很明显,但分配不是)?
答案 0 :(得分:10)
在每个方法的基础上,我问自己:
答案 1 :(得分:1)
这是一个陈腐的答案,但要抓住一个例外,你可以用它来实现恢复。不同的例外意味着您可以在架构中的不同级别处理异常。
答案 2 :(得分:1)
如果且仅当您可以实际执行某些操作来修复它时,您希望处理它发生的异常。
这是一个常见的例子:
int foo(String userInput) {
int i = Integer.parseInt(userInput);
return i * 4;
}
这将抛出除非数字的字符串输入之外的其他内容。但你无法做任何事情,所以你让它传播。
这是另一个例子
class Communicator {
private InputStream in;
private OutputStream out;
public Communicator(Socket socket) throws IOException {
in = new ObjectInputStream(socket.getInputStream());
out = new ObjectOutputStream(socket.getOutputStream());
}
}
如果套接字抛出IOException,您是否可能期望恢复并使Communicator仍然有效?我想不是。放手吧,让它传播,让它找到能够处理它的人。
此外,您应该知道自己没有catch
或声明throws
所有例外。如果它是RuntimeException
,则您不需要。对于大多数部分,这些异常通常意味着错误(NullPointerException,任何人?)或错误的用户输入(NumberFormatException。)