WEB开发网
开发学院软件开发Java Java 理论与实践: 平衡测试,第 2 部分:编写和优... 阅读

Java 理论与实践: 平衡测试,第 2 部分:编写和优化 bug 检测器

 2010-01-11 00:00:00 来源:WEB开发网   
核心提示: 清单 2. RuntimeException 捕获 bug 模式 —— 不要执行此模式publicvoidaddInstance(StringclassName){try{Classclazz=Class.forName(className);objectSet.add(


清单 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 块中将捕获的内容。

上一页  1 2 3 4 5 6 7  下一页

Tags:Java 理论 实践

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接