来看Java实际与理论:均衡测试,第2部分:编写和优化bug检测器
专门做了这个例子;而java的这个例子好像就是为了教学而写的,很多教学目的的例子是不考虑优化、性能的。这一冗长系列的第1部分先容了怎样举行无效测试,它构建了FindBugs插件来查找一个复杂的bug形式(只需挪用System.gc()便可)。Bug形式会标识有成绩的编码理论,它们经常位于bug地点的地区。固然,并非一切出现bug形式的中央都必定呈现bug,但这其实不能扼杀bug形式检测器的伟大作用。一个无效bug形式检测器的次要功效是发明更高百分比的可疑代码,使该形式具有更年夜的利用代价。创立bug形式检测器能够进步利用代价;创立检测器以后,不管是如今仍是未来,您都能够在您必要的任何代码上运转它,而且您大概对发明的成绩感应惊奇。比方,第1部分中的复杂检测器显现了对System.gc()的挪用,在JDK1.4.2中,它埋没在JPEG图象I/O库中。
编写检测器能够查找对特定静态办法的挪用,这其实不坚苦,可是年夜多半的bug检测器都包括相称多的剖析和完成。在这一期的文章中,您将开辟一个称为RuntimeExceptioncapture的更小bug形式的检测器(今朝,FindBugs刊行版中已包括此bug检测器。)
RuntimeException捕捉
用Java™言语举行非常处置的一个长处是:非常是一些对象,try-catch机制懂得非常范例的分层布局,并在客户机怎样处置毛病处置方面供应实践天真性。比方,假如不克不及找到文件,则FileInputStream机关函数会抛出FileNotFoundException,该非常是IOException的一个子类。此传统用法同意客户机处置未发明文件的前提,这些前提是从其他与文件相干的前提平分离出来的(假如他们喜好独自捕捉FileNotFoundException)。可是,他们还可使用捕捉IOException的办法处置一切与文件相干的毛病前提。
另外一方面,非常处置的次要缺点是:在准确利用非常时,易于创建带有三行或四行营业逻辑和20或30行非常处置的办法。由于毛病恢复代码在测试时简单呈现毛病而且实行坚苦,使一部分专门用于非常处置的代码莫衷一是并简单堕落。这类情形的典范示比方清单所示,个中带有两行“真的”代码的办法需要三个自力的捕捉块,每一个捕捉块都实行完整不异的操纵——纪录该非常:
清单1.多个不异的捕捉块
public void addInstance(String className) {
try {
Class clazz = Class.forName(className);
objectSet.add(clazz.newInstance());
}
catch (IllegalAccessException e) {
logger.log("Exception in addInstance", e);
}
catch (InstantiationException e) {
logger.log("Exception in addInstance", e);
}
catch (ClassNotFoundException e) {
logger.log("Exception in addInstance", e);
}
}
请拜见清单1,您大概实验将三个捕捉块兼并成捕捉Exception的独自捕捉块,由于每一个捕捉块的捕捉恢复操纵是不异的。乍一看,该战略仿佛是一个好方法——但代码正本有毛病,以是整合这些复制路径应当是一种改善。不外,此“改善”经常会带来意想不到的了局。由于RuntimeException扩大了Exception,将三个捕捉块兼并成一个捕捉块(如清单2所示),以是这会变动语义,如今,未经反省的非常将被纪录(而不传布)。此bug形式(个中RuntimeException简单被超年夜捕捉块捕捉)也称为RuntimeException捕捉。
清单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);
}
}
<p>
令人可喜的是java现在已经开源了,所以我想我上述的想法也许有一天会实现,因为java一直都是不断创新的语言,每次创新都会给我们惊喜,这也是我喜欢java的一个原因。 http://www.ckuyun.com/去下载,或到同济技术论坛的服务器ftp://www.ckuyun.com去下,安装上有什么问题,可以到论坛上去提问。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 是一种使网页(Web Page)产生生动活泼画面的语言 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 Java 编程语言的风格十分接近C、C++语言。 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
页:
[1]