使用ibm静态工具优化java代码

使用ibm静态工具优化java代码

ID:8983981

大小:157.00 KB

页数:15页

时间:2018-04-14

使用ibm静态工具优化java代码_第1页
使用ibm静态工具优化java代码_第2页
使用ibm静态工具优化java代码_第3页
使用ibm静态工具优化java代码_第4页
使用ibm静态工具优化java代码_第5页
资源描述:

《使用ibm静态工具优化java代码》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、使用IBM静态工具优化Java代码,第2部分: 分析错误报告文档选项打印本页窗体顶端窗体底端将此页作为电子邮件发送级别:初级丁钦浩 (dingqinh@cn.ibm.com),软件开发工程师,IBM2008年7月03日通过本系列 第1部分 的介绍,读者应该可以轻松地在Windows上运行BEAM,并能够对自己的Java工程进行代码分析了。本文我们将对其输出的报告结果文件进行分析,修改代码中的潜在错误,从而达到最根本的目的:提高代码质量。概述BEAM报告的结果文件是通过build.xml中 --b

2、eam::complaint_file 所定义的,在这里,本文假设其为BEAM-messages。BEAM-messages 记录着报出的所有代码缺陷,这些缺陷分为 ERROR,MISTAKE 和WARNING 三大类,严重程度依次递减。每一个具体的 ERROR,MISTAKE 和 WARNING 都代表着一个错误模式,本文接下来就通过实例分析理解其中的某些重要错误模式,告诉读者在写Java代码时如何避免这些错误模式的发生,从而写出高质量的代码。由于篇幅原因,本文只主要重点介绍四个常见的错误模式

3、,并在最后简单介绍一下在编程时还应该注意的一些其它技巧,文章结构如下:·操作空对象·数组访问越界·除0错误·内存泄漏·其它技巧回页首操作空对象这是报出的 ERROR2 错误模式。据个人项目经验,这种错误模式出现最为频繁,但是编程人员却往往很难发现,因为这种编译器发现不了的错误可能在代码运行很长时间时都不会发生,可是一旦出现,程序就会终止运行,并抛出runtime异常 java.lang.NullPointerException。通常有以下这些情况会导致操作空对象错误模式的发生。·调用空对象的方法

4、·访问或修改空对象的域·访问或修改空数组对象的数组元素·同步空对象·传入空对象参数下面让我们用简单易懂的例子一一介绍它们。调用空对象的方法清单1.调用空String对象的charAt()方法Stringstr=null;inta=0;if(a>0){str=newString[]{"developer","Works"};}charch=str.charAt(0);这是最典型的调用空对象方法的例子,调用一个未初始化的 String 对象的 chatAt() 方法。清单2.调用未初始化数组成员的方

5、法Integer[]array=null;try{array=newInteger[]{newInteger(2/0),newInteger(3),newInteger(4)};}catch(Exceptione){//Donothinghere}inti=array[0].intValue();数组 array 的三个 Integer 成员因为除数为0的异常并没有被初始化(这里只是用典型的除数为0的异常举例,其实实际工程中,初始化时发生的异常有时很难被发现,没有如此明显),但是接下来仍然调用其

6、第0个成员的 intValue() 方法。总结:调用空对象方法的错误非常常见,导致其出现的原因通常有两点:1.在某个方法开始处定义了空对象,程序员准备在其后的代码中对其进行初始化,初始化完毕后再调用该对象的方法。但是有时由于初始化代码中的某个不常见的 if 之类的条件不成立或者 for/while循环的条件不成立,导致接下来的赋值动作并没有进行,其结果就是之前定义的空对象并没有被初始化,然后又调用该对象的方法,从而造成了 java.lang.NullPointerException,如清单1所示

7、。1.初始化对象时出现了异常,但是没有对异常进行特殊处理,程序接下来继续运行,导致最终调用了该空对象的方法,如清单2所示。这种代码缺陷在大型代码工程中往往很难被发现,因为编译器不会报错,而且代码在实际运行中,可能99%的时候 if 条件都是满足的,初始化也是成功的,所以程序员很难在测试中发现该问题,但是这种代码一旦交付到用户手中,发现一次就是灾难性的。建议的解决方法:一定要明确知道即将引用的对象是否是空对象。如果在某个方法中需要调用某个对象,而此对象又不是在本方法中定义(如:通过参数传递),这时

8、就很难在此方法中明确知道此对象是否为空,那么一定要在调用此对象方法之前先判断其是否为空,如果不为空,然后再调用其方法,如:if(obj!=null){obj.method()…}。访问或修改空对象的域定义了某个类的对象,在没有对其初始化之前就试图访问或修改其中的域,同样会导致 java.lang.NullPointerException 异常。这种情况也非常常见,举一个比较典型的数组对象的例子,如清单3所示:清单3.访问未初始化数组的lengthString[]str=null;inta=0;w

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。