com*_*tta 114 java exception assertion
大多数时候我会使用异常来检查代码中的条件,我想知道什么时候使用断言是合适的时间?
例如,
Group group=null;
try{
group = service().getGroup("abc");
}catch(Exception e){
//I dont log error because I know whenever error occur mean group not found
}
if(group !=null)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
你能指出断言如何适应这里吗?我应该使用断言吗?
看起来我从不在生产代码中使用断言,只在单元测试中看到断言.我知道在大多数情况下,我可以使用异常来执行上面的检查,但我想知道"专业"的适当方式.
Gre*_*osz 164
出于我的想法(列表可能不完整,并且太长而无法容纳评论),我会说:
换句话说,异常解决了应用程序的健壮性,而断言解决了它的正确性.
断言的编写成本很低,几乎可以在任何地方使用它们而且我使用这个经验法则:断言语句看起来越愚蠢,它越有价值,它嵌入的信息就越多.在调试不正常的程序时,您一定会根据您的经验检查更明显的故障可能性.然后你将检查那些不可能发生的问题:这正是断言有助于节省时间的时候.
Mar*_*ius 79
应该使用断言来检查不应该发生的事情,而应该使用异常来检查可能发生的事情.
例如,函数可能除以0,因此应该使用异常,但可以使用断言来检查硬盘驱动器是否突然消失.
断言会阻止程序运行,但异常会让程序继续运行.
请注意,这if(group != null)不是一个断言,这只是一个条件.
Ste*_*n C 15
作为基本规则:
java命令默认关闭所有断言.)您的问题中的以下代码是糟糕的风格和潜在的错误
try {
group = service().getGroup("abc");
} catch (Exception e) {
//i dont log error because i know whenever error occur mean group not found
}
Run Code Online (Sandbox Code Playgroud)
问题是你不知道异常意味着找不到该组.service()调用也可能抛出异常,或者返回异常null然后导致异常NullPointerException.
当您捕获"预期"异常时,您应该只捕获您期望的异常.通过捕获java.lang.Exception(尤其是不记录它),您将更难以诊断/调试问题,并可能使应用程序造成更多损害.
| 归档时间: |
|
| 查看次数: |
44165 次 |
| 最近记录: |