说我有一个try语句和空捕获是不好的做法?例如,假设我有2个尝试单独的trys,其中一个可能失败但另一个成功或两者都成功或任何可能的组合。处理这样的代码是不好的做法?
实施例
if( mode == Modes.EDIT ){
try {user = userBo.findById(id).get(0); }
catch(Exception e) { }
try{
result = this.initializeEntityById(accountDao, id);
if( !result.equals(SUCCESS) ){
return result;
}
}
catch(Exception e){ }
}
在这个例子中,关注的变量是'id',我不确定进来的值是否有效,而且在前端它并不重要,因为代码会处理所有内容并提供正确的显示。
所以问题确实是:
答案 0 :(得分:1)
本身并没有不稳定性,但是对于空的捕获,没有对异常做任何事情,如果由于异常导致某些方面没有得到处理,这可能会使对象处于不一致状态。
话虽如此,空的catch块使调试非常困难。即使在生产代码中,您也应该为大多数例外提供基本的“通知”。
在测试代码时,在每个不执行任何操作的catch块中使用e.printStackTrace(
。
答案 1 :(得分:1)
userBo.existsWithId(id)
这样的方法,它会返回一个boolean
来说明用户是否存在。如果找不到用户,请让findById
返回null
,然后查看是否user == null
。 我认为这是你最好的选择。 答案 2 :(得分:1)
1) Is this a bad practice with the empty catch's?
是的,这不是一个好习惯。
2) Is there any potential instability that could occur that I'm not realizing?
如果出现任何问题并且抛出任何异常,那么您将无法识别出错的原因,因为在catch块中您没有做任何事情,所以假设它被处理。
3) Is there a better way to achieve what I'm looking to get at?
'
尝试在catch block
中记录异常堆栈跟踪。或者再扔一次
e.g. e.printstacktrace();
答案 3 :(得分:0)
是的,这是不好的做法。
如果抛出异常,则应以某种方式处理它,catch块用于保存处理代码。至少,如果您的方法中不需要恢复代码和备用逻辑来处理捕获的异常(这种情况很少见),您应该记录异常,以便您知道它发生了。
你可以在这里阅读一篇关于处理例外的优秀文章:
http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html?page=2
我发现第二页特别有帮助。