mik*_*kol 4 exception-handling
在开发过程中,您通常会实现异常处理程序吗?你在编写周围代码的同时编写它们,还是编写代码然后再回来"强化"它?
我通常会做后者,以便我可以确切地看到我的代码在哪里以及如何失败,但是我担心我的代码没有像我可能立即编写异常处理程序那样有弹性.
与此同时,我还不想花费大量的开发时间来找出当我还没有解决的其他实现细节时,我的代码可能失败的所有可能方式.
我很好奇其他开发者是如何做到这一点的.
更新:我只想感谢大家的回答!
我要么立即编写异常处理程序,要么允许异常向上传播.我非常喜欢我称之为"你不会回去修理它,你呢?" 原理.你说你会的,但老实说,一旦你开始工作,你就不会再回去修理它了,是吗?马上做好吧!立即编写您的异常处理程序,或添加一个throws子句并使其成为别人的问题.现在做正确的事.
但你知道什么,有时你不能.无论你做什么,不要用空的异常处理程序吞下异常!这是邪恶的:
try {
connection.close();
}
catch (Exception e) {
// TODO Auto-generated code
}
Run Code Online (Sandbox Code Playgroud)
我会在我的团队中挑选任何人来检查.
如果你真的不知道如何处理异常并且不能添加一个throws子句来向上传播它,那么至少要做一些中途负责的事情.如果没有别的,打印堆栈跟踪.它并不理想,但至少你没有隐藏错误.
catch (IOException exception) {
exception.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
通过应用程序的日志记录系统记录它是更好的,但你不应该养成它的习惯.应该是来电者有责任处理这类事情.
catch (IOException exception) {
log.error(exception, "Unable to open configuration file %s.", fileName);
}
Run Code Online (Sandbox Code Playgroud)
作为最后的手段,您可以throws通过将异常包装在a中来绕过您的子句RuntimeException.至少你给一个更高级别的电话链有机会处理错误,这通常是正确的事情.
catch (IOException exception) {
throw new RuntimeException(exception);
}
Run Code Online (Sandbox Code Playgroud)