Java 理论与实践: 平衡测试,第 2 部分:编写和优化 bug 检测器
2010-01-11 00:00:00 来源:WEB开发网
清单 2. RuntimeException 捕获 bug 模式 —— 不要执行此模式
public void addInstance(String className) {
try {
Class clazz = Class.forName(className);
objectSet.add(clazz.newInstance());
}
catch (Exception e) {
logger.log("Exception in newInstance", e);
}
}
bug 模式通常源自语言的模糊功能或类库;出现此 bug 模式是因为 RuntimeException 扩展了 Exception,这稍微有点违反常理。对 RuntimeException 捕获的修复非常容易 —— 您需要了解以下问题:首先捕获 RuntimeException,并在捕获 Exception 之前重新将其抛出,如清单 3 所示。不过,即使知道 bug 模式及其修复方法,在代码审查过程中也很容易忘记执行它或忽略它,并且编译器也不会通知您。这是引入 bug 模式的原因,帮助您避免违犯 “您已较好地了解” 之类的错误。
清单 3. 通过显式处理 RuntimeException 修复 RuntimeException 捕获
public void addInstance(String className) {
try {
Class clazz = Class.forName(className);
objectSet.add(clazz.newInstance());
}
catch (RuntimeException e) {
throw e;
}
catch (Exception e) {
logger.log("Exception in newInstance", e);
}
}
编写 RuntimeException 捕获检测器
正如您在 上一期 中所学的,编写 bug 模式的第一个步骤是清楚地标识 bug 模式。在这里,bug 模式是捕获 Exception 的 catch 块,这时不存在用于 RuntimeException 的相应捕获块,并且尝试块中的任何方法调用或 throw 语句都不会抛出 Exception。要检测此 bug 模式,则需要知道 try-catch 块的位置、try 块可能抛出的内容以及在 catch 块中将捕获的内容。
更多精彩
赞助商链接