ImageVerifierCode 换一换
格式:DOCX , 页数:41 ,大小:30.34KB ,
资源ID:4957827      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4957827.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(JAVA源代码缺陷说明.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

JAVA源代码缺陷说明.docx

1、JAVA源代码缺陷说明JAVA源代码缺陷说明1.1资源管理类资源泄漏缺陷描述:资源使用结束后未释放资源。缺陷危害:资源泄漏可能导致资源长时间被占用而无法释放,进而可能导致资源耗尽而系统不可用。修复或避错建议:资源使用结束后调用释放资源的方法。示例1:不规范用法public void exampleFun(String name) FileInputStream stream = new FileInputStream(name);/使用stream对象. /方法退出前未释放stream对象的资源示例2:规范用法public void exampleFun(String name) FileIn

2、putStream stream = new FileInputStream(name); try /使用stream对象 . catch (Exception e) . finally stream.close(); /释放stream对象的资源 1.2资源使用类使用已释放的资源缺陷描述:使用已释放的资源。缺陷危害:使用已释放的资源会导致程序抛出异常。示例:不规范用法public void exampleFun(InputStream stream) .stream.close(); /释放stream对象的资源.byte b = new byte200;int i = stream.rea

3、d(b); /使用已释放资源的stream对象.1.3解引用类null解引用缺陷描述:对于值可能为null的引用类型变量,未检查变量是否为null而直接解引用该变量。缺陷危害: null解引用会导致程序抛出NullPointerException类型的运行时异常。修复或避错建议:在解引用变量前检查变量是否为null并对变量值为null的情况进行处理。示例3:不规范用法public String exampleFun(bool flag, String s1, String s2) String s3 = null;if (flag) s3 = s1 + s2;/变量s3的值可能为null,当变

4、量s3的值为null时,以下语句出现null解引用return s3.trim(); 示例4:规范用法public String exampleFun(bool flag, String s1, String s2)String s3 = null;if (flag) s3 = s1 + s2; return s3.trim();return null; 1.4控制语句类用于控制程序流程的条件表达式为常量缺陷描述:用于控制程序流程的条件表达式的结果恒为真或恒为假。缺陷危害:用于控制程序流程的条件表达式为常量时,代码的部分分支路径永远不会被执行,条件表达式变得毫无意义。当用于控制循环的条件表达式

5、的结果恒为真时,可能导致程序进入死循环。示例:不规范用法public void exampleFun()String s = ;.if(s = null) /用于控制程序流程的条件表达式“s = null”恒为假 .“If”语句的“then”分支无语句缺陷描述:“If”语句的“then”分支无语句。缺陷危害:“If”语句的“then”分支无语句通常不是程序的本意。“If”语句的“then”分支无语句通常是遗漏了代码,可能会导致程序出错或程序功能实现不正确。修复或避错建议:补充“then”分支的代码。示例:不规范用法public void exampleFun(boolean cond) if

6、(cond) /“If”语句的“then”分支无语句“If”语句的“then”分支只有分号缺陷描述:“If”语句的“then”分支只有分号。缺陷危害:“If”语句的“then”分支只有分号通常不是程序的本意。“If”语句的“then”分支只有分号通常是打字错误,可能会导致“If”语句的“then”分支部分的代码在不满足判断条件时也进行执行。修复或避错建议:修复打字错误。示例:不规范用法public void exampleFun() int a = 0;if (a 0); /“If”语句的“then”分支只有分号 a+; 在用于控制程序流程的条件表达式中使用位运算符“&”或“|”缺陷描述:在用

7、于控制程序流程的条件表达式中使用位运算符“&”或“|”。缺陷危害:当用于控制程序流程的条件表达式使用位运算符“&”或“|”时,程序的本意可能为使用运算符“&”或“|”,可能会改变原本的判断逻辑,导致程序执行不同的分支路径。修复或避错建议:使用运算符“&”或“|”。示例5:不规范用法public void exampleFun(int arr) /在用于控制程序流程的条件表达式中使用位运算符“&”if (arr !=null & arr.length != 0) . 示例6:规范用法public void exampleFun(int arr) if (arr !=null & arr.leng

8、th != 0) . 1.5运算处理类非法计算缺陷描述:对于某些算术运算的操作数,其取值是受到限制的,如%,/,%=,/=后面的除数都不应该为0。一些数学函数的参数是有定义域的,如果变量的取值范围中包括不合法的数据则会引起异常。如asin,acos,atan2,div,fmod,ldiv,log,log10,sqrt等。缺陷危害:非法计算错误会产生运行时异常处理逻辑,导致未知错误。修复或避错建议:在使用算术运算前应检查操作数或运算参数,判断其是否符合相应的约束,并对不符合的情况进行处理。示例7:不规范用法public void exampleFun(int i) if(i10) i=20/i;

9、 /非法计算 示例8:规范用法public void exampleFun(int i) if(i10)&(i!=0) i=20/i; 运算结果溢出缺陷描述:使用int类型进行计算,然后将计算结果赋值给一个long类型的变量。缺陷危害:使用int类型进行计算,当计算结果超出int类型的最大值时,计算结果不会自动转换成long类型,会导致计算结果错误。修复或避错建议:将int类型转换成long类型后再进行计算。示例9:不规范用法long convertDaysToMilliseconds(int days) return 1000*3600*24*days; /运算结果溢出示例10:规范用法lo

10、ng convertDaysToMilliseconds(int days) return 1000L*3600*24*days; 浮点数的相等或不等比较缺陷描述:两个浮点型或双精度浮点型的值使用“=”或“!=”运算符进行比较。缺陷危害:浮点数在计算机中的存储和计算是不精确的,因此对浮点数采用“=”或“!=”运算符进行比较可能得到与期望结果相反的结果。修复或避错建议:通过计算两个浮点数之间的差的绝对值是否小于一个允许的误差值判断浮点数之间是否相等或不等。示例:不规范用法public bool exampleFun(double a, double b) if (a = b) /浮点数的相等比较

11、 return true;return false;自身相除或比较缺陷描述:在表达式中变量与自己相除或作比较。缺陷危害:自身相除或比较通常不是程序的本意,程序中可能存在打字错误,自身相除可能导致程序出错或程序功能实现不正确,自身比较可能导致部分代码永远不会被执行。修复或避错建议:修复程序中存在的打字错误。示例11:不规范用法public bool exampleFun(int a, int b)if(aa) /aa恒为假return true; return false;示例12:规范用法public bool exampleFun(int a, int b)if(ab) return tru

12、e; return false;位运算错误缺陷描述:int或long变量使用位运算符“&”或“|”与位掩码进行位运算后与常量进行比较,且比较结果恒为真或恒为假,不会随着int或long变量的值的改变而发生变化。缺陷危害:表达式的结果为可预知的常量通常不是程序的本意,此缺陷可能表明位运算符或位掩码存在错误,导致程序出错或程序功能实现不正确。修复或避错建议:修复位运算符或位掩码中存在的错误。示例13:不规范用法public void exampleFun(int i) if (i | 0x0F = 0) /表达式“i | 0x0F = 0x0F”恒为假 . 示例14:规范用法public void

13、 exampleFun(int i) if (i & 0x0F = 0) . 1.6比较判断类equals方法的参数为对象自身缺陷描述:代码中调用equals方法的对象和equals方法的参数对象相同。缺陷危害:若代码中调用equals方法的对象和equals方法的参数对象相同,则返回值恒为true,当作为条件表达式用于控制程序流程时,代码的部分分支路径永远不会被执行,条件表达式无意义。当作为条件表达式用于控制循环语句时,可能导致程序进入死循环。示例:不规范用法public void exampleFun()String s = abc;if(s.equals(s)) / “s.equals(

14、s)”恒为真 . . equals方法的参数为null缺陷描述:调用equals方法时参数为null。缺陷危害:调用equals方法时参数为null则返回值恒为假, 作为条件表达式时会导致部分代码永远不会被执行,条件表达式无意义。示例:不规范用法public void exampleFun() String s = abc; if(s.equals(null)) /“s.equals(null)”恒为假 . .this引用与null比较缺陷描述:用this引用与null进行比较。缺陷危害: this引用不可能为null,因此使用this引用与null进行比较无意义。修复或避错建议:删除this

15、引用与null进行比较的代码。示例:不规范用法public void exampleFun() if (this = null) /“this = null”恒为假 . .equals方法的错误使用缺陷描述: equals方法的错误使用情况包括:两个数组间使用equals方法进行比较、数组和非数组间使用equals方法进行比较、不兼容的类型间使用equals方法进行比较。缺陷危害:两个数组间使用equals方法进行比较就相当于“=”运算符,比较的是数组对象的引用而不是数组的值,可能导致判断逻辑错误;数组和非数组间、不兼容的类型间使用equals方法进行比较,比较的结果总是false,可能导致部

16、分代码永远不会被执行,条件表达式无意义。修复或避错建议:两个数组间的值比较应对数组的每个元素的值分别进行比较,两个数组间的引用比较应使用“=”运算符。示例:不规范用法public class MyClass String names; public boolean equals(Object o) if (!(o instanceof MyClass) return false; MyClass m = (MyClass)o; return this.names.equals(m.names);/两个数组间采用equals方法进行比较 低效的空字符串判断缺陷描述:采用equals方法判断字符串

17、是否为空字符串。缺陷危害:采用equals方法判断字符串是否为空字符串会导致程序运行效率低下。修复或避错建议:采用length方法获取字符串的长度并判断长度是否为0。示例15:不规范用法public void exampleFun(String s) if (s.equals() /采用equals方法判断字符串是否为空字符串 .示例16:规范用法public void exampleFun(String s) if (s.length() = 0) .使用“=”运算符比较字符串缺陷描述:使用“=”运算符比较字符串。缺陷危害:“=”运算符比较的是字符串对象的引用而不是字符串的值。使用“=”运算

18、符比较字符串可能会产生欺骗的结果。修复或避错建议:使用equals方法比较字符串对象。示例17:不规范用法public void exampleFun(String s) if(s = abc) /使用“=”运算符比较字符串 .示例18:规范用法public void exampleFun(String s) if(s.equals(abc) .1.7类型转换类集合可能抛出 ClassCastException异常缺陷描述:从集合中获取元素后进行转换的目标类型不为存入集合的元素类型或其父类。缺陷危害:当类型转换不兼容时会引起 ClassCastException 异常。修复或避错建议:在进行类

19、型转换前使用“instanceof”运算符来检查对象是否是转换的目标类型的一个实例。示例:不规范用法public class MyClass HashMap hm; public void exampleFun() hm.put(a,b); /存入集合时元素为String类型,取出时为MyClass类型MyClass mc = (MyClass)hm.get(a); 类型转换引起潜在的 ClassCastException 异常缺陷描述:使用“instanceof”运算符检查的对象是A类型的实例,在转换时却指向B类,且B类不为A类的父类。缺陷危害:当类型转换不兼容时会引起 ClassCastE

20、xception 异常。修复或避错建议:在进行类型转换前采用“instanceof”运算符检查被转换的对象是否为转换的目标类型。示例19:不规范用法public void exampleFun(Object o) if (o instanceof String) /对象“o”的类型是“String”类型,却转换成“StringBuffer”类型StringBuffer sb = (StringBuffer) o; 示例20:规范用法public void exampleFun(Object o) if (o instanceof StringBuffer) StringBuffer sb =

21、(StringBuffer) o; 从集合中获取元素的关键字类型与存入集合的关键字类型不一致缺陷描述:从集合中获取元素的关键字类型与存入集合的关键字类型不一致。缺陷危害:从集合中获取元素的关键字类型与存入集合的关键字类型不一致将导致无法从集合中获取期望的元素。修复或避错建议:采用存入集合的关键字类型从集合中获取元素。示例21:不规范用法public class MyClass HashMap len=new HashMap(); void fill(File dir) File list = dir.listFiles(); for (int i = 0; i list.length; i+)

22、 File file = listi; len.put(file, new Long(file.length(); /存入的关键字类型是“File” int getLength(String file) Long l = (Long) len.get(file); /取出的关键字类型是“String” if (l!=null) return l.intValue(); return 0; 示例22:规范用法public class MyClass HashMap len=new HashMap(); void fill(File dir) File list = dir.listFiles()

23、; for (int i = 0; i list.length; i+) File file = listi; len.put(file, new Long(file.length(); /存入的关键字类型是“File” int getLength(File file) Long l = (Long) len.get(file); /取出的关键字类型也是“File” if (l!=null) return l.intValue(); return 0; 1.8声明定义类子类的成员变量与父类的public或protected成员变量同名缺陷描述:子类的成员变量与父类的public或protect

24、ed成员变量同名。缺陷危害:子类的成员变量与父类的public或protected成员变量同名会隐藏父类的成员变量,容易产生混淆。修复或避错建议:避免子类的成员变量与父类的public或protected成员变量同名。示例23:不规范用法public class SuperClass protected int a; .public class SubClass extends SuperClass private int a; /声明了一个与父类的protected成员变量同名称的变量。 .示例24:规范用法public class SuperClass protected int a; /

25、 .public class SubClass extends SuperClass private int b; / .非构造器的方法命名与类名相同缺陷描述:方法命名与类名相同,且包含返回类型。缺陷危害:方法与构造器名字相同容易造成混淆,可能造成不期望的结果。修复或避错建议:对非构造器的方法进行命名时不要与类名相同。若为构造器,则不应包含返回类型。示例25:不规范用法public class MyClass public String name; public void MyClass() /方法名与类名相同,返回类型为“void” this.name=name;示例26:规范用法publi

26、c class MyClass public String name; public MyClass () this.name=name;1.9调用返回类忽略只作用在返回值上的方法的返回值缺陷描述:调用只作用在返回值上的方法,该方法不改变其他对象的值,并且调用该方法的返回值未赋值给变量保存。缺陷危害:方法只作用在返回值上却忽略返回值则方法调用无任何意义,可能会导致程序出错或程序功能实现不正确。修复或避错建议:调用只作用在返回值上的方法时,保存方法的返回值。示例27:不规范用法public String exampleFun(String s) s.trim(); /未保存s.trim方法的返回

27、值return s; 示例28:规范用法public String exampleFun(String s) String str;str = s.trim();return str;忽略新创建的对象缺陷描述:使用“new”关键字创建对象时,未保存对象的引用,也未直接调用对象的方法。缺陷危害:忽略新创建对象会造成程序代码难以理解,也有可能隐藏逻辑错误。修复或避错建议:保存新创建的对象的引用,或直接调用新创建的对象的方法。示例29:不规范用法public void exampleFun() new Object(); /新创建对象被忽略. 示例30:规范用法public void example

28、Fun() Object o = new Object();.忽略read或skip方法的返回值缺陷描述:使用read、skip等方法获取数据时,未对方法返回值进行检查就直接使用获取的数据。缺陷危害:使用read、skip等方法获取数据时,获取数据可能失败,如果不对返回值进行检查就直接使用获取的数据可能导致程序出错。修复或避错建议:使用read、skip等方法获取数据时,对方法返回值进行检查,确保获取数据成功后再使用获取的数据。示例31:不规范用法void copyFile(String src, String dest) try File srcFile = new File(src); File destFile = new File(dest); FileInputStream fis = new FileInputStream(srcFile); FileOutputStream fos = new FileOutputStream(destFile); byte bytes = newbyte1024; fis.read(bytes); /read操作未检查方法返回值 fos.write(bytes, 0, bytes.length);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1