- 浏览: 21450 次
- 性别:
- 来自: 武汉
文章分类
最新评论
JAVA十大低级错误
1、方法和变量命名随意而不规范,没有类注释、方法注释或注释不规范,代码修改后,不同步修改注释,导致注释与代码不符。
2、数据类不重载toString()方法(说明:编程规范要求“所有的数据类必须重载toString() 方法,返回该类有意义的内容”)。
3、对方法的调用不进行空指针判断而造成空指针异常。
4、数据库操作、IO操作的资源没有及时释放,数据库结果集和连接释放顺序不正确,或者使用没有必要的预处理。
5、循环体内包含了大量没有必要在循环中处理的语句,循环体内循环获取数据库连接,循环体内进行不必要的try-catch操作。(说明:编程规范中建议“不要在循环体内调用同步方法和使用 try-catch 块”)。
6、嵌套使用try-catch,或者try-catch后面没有必要的finally操作(说明:数据库操作、IO操作等需要使用结束close()的对象必须在try -catch-finally 的finally中close())。
7、不对数组下标作范围校验。
8、equals操作时没有将常量放在equals操作符的左边(说明:字符串变量与常量比较时,先写常量,这样可以避免空指针异常)。
9、字符串转化为数字时没有做异常处理。
10、没有在异常分支记录日志导致问题定位困难。
代码案例(说明:所有样例都是错误的代码):
1、方法和变量命名随意而不规范,没有类注释、方法注释或注释不规范,代码修改后,不同步修改注释,导致注释与代码不符。
public class MethodName
{
//错误:没有类的注释
//错误:方法的注释不规范、方法名不规范
public void a( int i )
{
//错误:变量名称太短
String b = "";
//错误:变量名称太长,超过40个字符
String longVariableLongVariableLongVariableLongVariable = "";
}
/**
* <一句话功能简述>方法命名约定:应以小写字母开头、同时命名不应含有下划线字符。
* <功能详细描述>
* @param i
* @see [类、类#方法、类#成员]
*/
public void Check_Method( int i )
{
// 错误:方法名称不规范
//错误:变量名称不规范
String b = "";
}
/**
* <一句话功能简述>变量、方法名、类名、接口名避免出现美元字符$。
* <功能详细描述>
* @param i
* @see [类、类#方法、类#成员]
*/
public void Fo$o ()
{
// 错误:方法名称不规范
}
/**
* <一句话功能简述>注意hashCode方法大小写。此规则用于推测作者可能是要实现hashCode方法,但大小写错了。
* <功能详细描述>
* @return
* @see [类、类#方法、类#成员]
*/
public int hashcode()
{
// 错误:方法名称不规范
int temp = 0;
// oops, this probably was supposed to be hashCode
return temp;
}
/**
*
* @param o 只有参数类型和返回值类型不一致,方法名equals完全相同(包括大小写也相同),推测可能是想实现equals方法。
* @return
*/
public int equals(Object o)
{
// 错误:方法名称不规范
// oops, this probably was supposed to be boolean equals
int temp = 0;
return temp;
}
/**
* <一句话功能简述>只有参数类型和返回值类型不一致,方法名equals完全相同(包括大小写也相同),推测可能是想实现equals方法。
* <功能详细描述>
* @param s
* @return
* @see [类、类#方法、类#成员]
*/
public boolean equals(String s)
{
// 错误:方法名称不规范
// oops, this probably was supposed to be equals(Object)
return true;
}
/**
* <一句话功能简述>'getX()'方法同时返回值又是 'boolean' ,则建议用'isX()'命名。checkParameterizedMethods属性用于决定是否对带参数的方法检测。
* <功能详细描述>
* @return
* @see [类、类#方法、类#成员]
*/
public boolean getFoo()
{
// 错误:方法名称不规范
// bad
return true;
}
}
2、数据类不重载toString()方法(说明:编程规范要求“所有的数据类必须重载toString() 方法,返回该类有意义的内容”)。
public class Content extends BaseMetaData
{
private String oldCID;
private String cId;
private String spId;
private int type;
private int serviceType;
.........................
/**
* 设置修改标识
* @param update_flag 修改标识
*/
public void setUpdate_flag(String update_flag)
{
this.updateFlg = update_flag;
}
public void setVersion(String version)
{
this.version = version;
}
public String toString()
{
//没有重载toString方法或者重载无意义的toString方法
return null;
}
}
3、对方法的调用不进行空指针判断而造成空指针异常。
/**
* <一句话功能简述>演示不进行空指针判断造成空指针异常
* <功能详细描述>
*
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class NullPoint
{
/**
* <一句话功能简述>
* <功能详细描述>
* @return
* @see [类、类#方法、类#成员]
*/
public String returnNull ()
{
String temp = null;
return temp;
}
public void checkNull()
{
String str1 = "aa";
//错误:没有对returnNull()的值进行为空判断,会造成空指针
if (str1.equals(returnNull()))
{
str1 = returnNull();
}
print(str1);
}
public void print(String str)
{
}
}
4、数据库操作、IO操作的资源没有及时释放,数据库结果集和连接释放顺序不正确,或者使用没有必要的预处理。
/**
* <一句话功能简述>该类用来演示没有释放资源的的错误
* <功能详细描述>
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class ReleaseRes
{
public void releaseDB ()
{
Connection conn = null;
APLResultSet rs = null;
String sql= "";
try
{
conn = DB.getConnection();
rs = DB.query(sql);
if (rs.next())
{
return rs.getString("currentdate");
}
else
{
return DateTool.getCurrentDate(pattern);
}
Conn.close();
//错误:连接没有在finally正确释放,会出现异常时导致在运行一段时间后,系统由于连接池满载而崩溃。
}
catch (DBException e)
{
...................
}
//错误:资源APLResultSet没有正确释放
}
/**
* <一句话功能简述>
* <功能详细描述>
* @param file
* @see [类、类#方法、类#成员]
*/
public void releaseIO (File file)
{
StringBuffer sb = null;
BufferedReader in = null;
try
{
in = new BufferedReader(new FileReader(file));
sb = new StringBuffer();
for (String line; (line = in.readLine()) != null;)
{
sb.append(line + "\r\n");
}
}
catch (IOException ex)
{
Throw ex;
}
//错误:IO资源没有正确释放,需要在finally中释放资源
}
5、循环体内包含了大量没有必要在循环中处理的语句,循环体内循环获取数据库连接,循环体内进行不必要的try-catch操作。(说明:编程规范中建议“不要在循环体内调用同步方法和使用 try-catch 块”)
/**
* <一句话功能简述>该类用来演示循环中的错误
* <功能详细描述>
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class CheckCycle
{
public void cycleInfo()
{
String[] Str = null;
//获取各个部件的通知地址
Str = outNotify.getResult();
StringBuffer sb = null;
BufferedReader in = null;
Connection conn = null;
APLResultSet rs = null;
String sql= "";
File file = null;
for (int i = 0; i < Str.length; i++)
{
//错误:判断完全可以在for外部进行而不是在内内部。
if( null != Str)
{
System.out.print(Str[i]);
}
//错误:不要在循环中获取数据库连接。
conn = DB.getConnection();
//错误:循环体内进行无必要的try-catch操作,完全可以放在循环外边。
try
{
//错误:不要在循环中获取IO连接。
in = new BufferedReader(new FileReader(file));
sb = new StringBuffer();
}
catch (IOException ex)
{
Throw ex;
}
}
}
}
6、嵌套使用try-catch,或者try-catch后面没有必要的finally操作(说明:数据库操作、IO操作等需要使用结束close()的对象必须在try -catch-finally 的finally中close())。
/**
* <一句话功能简述>演示嵌套循环的错误
* <功能详细描述>
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class NestingTry
{
/**
* <一句话功能简述>
* <功能详细描述>
* @see [类、类#方法、类#成员]
*/
public void checkTry()
{
StringBuffer sb = null;
BufferedReader in = null;
File file = null;
try
{
initFtpClient(this.ftpClient, getFtpServConfig());
// 把绝对路径加入到文件中
String[] absoluteFiles null;
//错误:完全没有必要在内容进行异常处理,而应该将异常处理放在try块后面进行处理。
try
{
absoluteFiles = addAbsolutePath(this.ftpClient, files);
}
Catch(IOException ex)
{
Throw ex;
}
File file = null;
in = new BufferedReader(new FileReader(file));
sb = new StringBuffer();
}
catch (Exception e)
{
throw new FtpOperationsException(FtpConst.Ftp_Operations_Del_Error,
"IOException when invoking deleteFiles method", e);
}
//错误:IO资源没有正确释放,必须有finally进行释放资源
}
}
7、不对数组下标作范围校验。
/**
* <一句话功能简述>该类用来演示数据下标越界
* <功能详细描述>
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class ArrayOver
{
public void checkArray()
{
//获取一个数组对象
String[] cIds = ContentService.queryByName(name);
if(null != cIds)
{
//错误:只是考虑到cids有可能为null的情况,但是cids完全有可能是个0长度的数组,因此cIds[0]有可能数组下标越界。
String cid=cIds[0];
}
}
}
8、equals操作时没有将常量放在equals操作符的左边(说明:字符串变量与常量比较时,先写常量,这样可以避免空指针异常)。
/**
* 定义常量
*/
public static final String SP_NAME = "SPNAME";
/**
* <一句话功能简述>常量比较
* <功能详细描述>
* @see [类、类#方法、类#成员]
*/
public void equalsConst()
{
String temp = null;
//错误;//在temp为null的情况下,此时会导致意想不到的异常抛出,如果将常量放在左边,就不会有这种问题。
if(temp.equals(SP_NAME))
{
temp = SP_NAME + "AA";
}
}
9、字符串转化为数字时没有做异常处理。
/**
* <一句话功能简述>字符传传唤成数字
* <功能详细描述>
* @see [类、类#方法、类#成员]
*/
public void switchStr()
{
String temp = "123a";
//错误:对字符串转换为数字没有进行任何异常处理。可能抛出未知异常。
if(Integer.parseInt(temp) == 123)
{
//......
}
}
10、没有在异常分支记录日志导致问题定位困难。
/**
* 根据objectId删除业务信息
*
* @param id 业务objectId
* @throws IllegalServiceStatusException 非法业务状态异常
* @see [类、类#方法、类#成员]
*/
public void deleteService(String id)
throws IllegalServiceStatusException
{
log.enterMethodDebugLog(new Object[][] {{"id", id}});
MdspTServiceinfo serviceInfo = getMdspServiceByObjectId(id);
if (null == serviceInfo)
{
return;
//错误:异常分支没有记录日志,导致问题定位困难。
}
........
}
相关推荐
java十大低级错误详解和案例,灰常不错哦!!
Java编程中的十大低级错误是每个开发者应该避免的常见陷阱,它们不仅影响代码的可读性和维护性,还可能导致程序运行时出现各种异常。以下是这些错误的详细解释和改进建议: 1. **命名规范**:良好的命名规范是提高...
以下是对标题和描述中提到的十大低级错误的详细解释: 1. **命名不规范**:命名应该清晰、具有描述性,遵循驼峰命名法,同时类、方法和变量的命名应与它们的功能相符。类注释、方法注释也是必要的,以帮助其他...
### JAVA 10大低级错误详解 #### 1. 命名不规范 **问题描述**: 在代码示例中,类对象 `sss1` 和 `sss2` 的命名不符合Java命名规范。 **解决方案**: - **sss1** 应修改为具有描述性的变量名,例如 `...
以上只是部分基于华为JAVA编程规范的知识点,具体细节需要参考《JAVA编程军规.doc》《JAVA十大低级错误.doc》《华为_Java编程规范.pdf》《华为JAVA编程规范.doc》等文档。这些规范旨在提升代码质量和团队协作效率,...
Java编程中的十大低级错误是新手开发者常犯的典型错误,这些错误往往导致代码质量下降,可读性差,甚至引发程序运行时的异常。以下是对这些错误的详细解释: 1. **命名不规范**:良好的命名是代码可读性的基础。...
【Java新十大低级错误】 Java作为一种广泛应用的高级编程语言,其强大且灵活的特性深受开发者喜爱。然而,即便如此,新手和经验丰富的开发者都可能在编写代码时犯一些低级错误,这些错误可能导致程序运行异常、性能...
7. **候选人常犯的十大错误**:总结并分析了求职者在面试过程中常见的错误,并给出避免这些错误的建议。 - 准备不足 - 沟通不畅 - 对公司缺乏了解 8. **常见问题解答**:针对求职者关心的问题进行了详细的解答...
书中列出了应聘者常犯的十大错误,例如缺乏练习、不熟悉基本概念等。为了避免这些错误,应聘者应该多做练习,熟悉常见的数据结构和算法,并且在面试前进行模拟面试。 #### 三、面试题目篇 本书的大部分内容都集中...
- **C++/Java/数据库/低级编程**:提供了特定语言和领域的知识介绍。 总之,《程序员面试指南》不仅是一本面试题集,更是一部涵盖广泛IT知识的宝典,适合所有希望提升自己编程能力和面试表现的求职者阅读。通过本书...
- **避免面试中常见的十大错误**:列举了求职者在面试过程中容易犯的错误,并给出了改进建议。 - **面试官视角的故事**:通过真实案例展示了面试官的观点,帮助读者理解面试官的心理预期。 - **面试后的处理**:介绍...
- **十大错误及避免方法**:列举求职者在面试过程中容易犯的十个错误,并提供相应的解决方案。 #### 常见问题解答 - **FAQ**:针对求职者可能遇到的问题,提供详细的解答,涵盖面试准备、面试技巧等多个方面。 ###...
为了帮助读者更好地理解和掌握这些概念,作者还提供了各种编程语言的知识,包括C++、Java、数据库、低级编程、网络编程、多线程和锁等高级主题。特别是对于每个数据结构和算法,书中都有详细的解释和编码示例,使...
3. **常见错误与避免方法**:作者总结了求职者在面试过程中容易犯的十大错误,并提供了有效的避免策略。 4. **算法解决思路**:本书还提供了解决复杂算法问题的五种有效方法,帮助读者提升解决问题的能力。 5. **...
- **十大常见错误**:列举了求职者在面试过程中容易犯的错误,并给出了相应的避免策略。 - **常见问题解答**:解答了一些求职者普遍关心的问题。 - **面试题目汇总**:收录了大量的面试题目,涵盖了数据结构、算法等...
- **语言特定知识:** 介绍 C++、Java、数据库管理和低级编程等领域的专业知识。 #### 知识点详解 - **五大算法解决策略**: - **递归(Recursion)**:递归是一种重要的算法思想,尤其适用于那些问题可以分解为...