如何写出健壮的Java代码
近来在公司写代码,写出的代码发现BUG很多,为了实现一个功能,代码改了又改,影响了工单的效率,也影响个人绩效,因此从网上找了些关于写健壮代码的文章看了看,再加上自己的一些经验总结。
所谓健壮的代码是指:健壮性又称鲁棒性,是指软件对于规范要求以外的输入情况的处理能力。
所谓健壮的系统是指对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。
另外健壮性有时也和
容错性,可移植性,正确性有交叉的地方。
比如,一个软件可以从错误的输入推断出正确合理的输入,这属于
容错性量度标准,但是也可以认为这个软件是健壮的。
一个软件可以正确地运行在不同环境下,则认为
软件可移植性高,也可以叫,软件在不同平台下是健壮的。
一个软件能够检测自己内部的设计或者编码错误,并得到正确的执行结果,这是软件的正确性标准,但是也可以说,软件有内部的保护机制,是模块级健壮的。
软件健壮性是一个比较模糊的概念,但是却是非常重要的软件外部量度标准。
软件设计的健壮与否直接反应了分析设计和编码人员的水平。即所谓的高手写的程序不容易死。
【百度百科】
封装和信息隐藏是导致健壮类和组件设计的基本原则
1.方法中尽量要有try--catch语句块
2.对于for循环for(int i=o;i<list.size();i++)显然不如for(int i=o;list!=null&&i<list.size();i++)健壮。
以下是转别人的一些经验:
(1) 使用Integer.valueOf()代替new Integer();
(2) if (result.size() > 0) return true;
return false;
可以优化为return return result.size()>0
(3) 使用"const".eqauls(variable)代替 variable.eqauls("const") 避免null point exception
(4) 在使用字串的拼接的时候,建议使用StringBuffer代替String
(5) 在进行数据库操作的时候用PreparedStatement代替Statement,可以避免因为引号过多而引起的错误
(6) 在进行复杂查询语句的拼接的时候,建议加上"where 1=1",当然在不考虑数据库的性能.
(7)try{}catch(Exception e){} finally{if(conn!=null){conn.colse();conn==null}}在使用数据库操作的
时候尽量多用finally语句,进行资源的释放。
(8) 在进行多异常捕获的时候,最后建议加上Exception异常做没有考虑到的异常捕获,比如
try{}catch(OtherException e){}catch(Exception e){} finally{if(conn!=null){conn.colse();conn==null}}
(9) 给每个if(condition){}都加上大括号,即使里面只有一句话,加强程序的可读性
(10)能用常量的东西都要用常量来完成,避免使用硬编码,增加可维护性质。比如少用 String str = "123"
使用private static final CONST = "123" ; String str = CONST;
(11) 定义的静态的常量用全大写,方法名开头用小写,类名用大写。在bean中定义的变量名用小写,并且所有的名字
命名要体现出业务的特性。呵呵,这里说到了规范。。。
(12) 多看看Apache下的一些Utils包吧!方便实用,必备工具!
(13) 可以用for(int i= 100;i>0;i--;)去代替for(int i = 0;i <100;i++) 这样可以提高程序的运行速度
(14) 写注释有助于写出逻辑清晰的代码
(15) 用字符分隔多字符串时,为了防止字符串中有设定的分隔符,我采用如下字符进行分隔 (c#的,JAVA也差不多)
char char2 = '\x0012'; string strreg = ""; strreg += char2;
(2) if (result.size() > 0) return true;
return false;
可以优化为return return result.size()>0
(3) 使用"const".eqauls(variable)代替 variable.eqauls("const") 避免null point exception
(4) 在使用字串的拼接的时候,建议使用StringBuffer代替String
(5) 在进行数据库操作的时候用PreparedStatement代替Statement,可以避免因为引号过多而引起的错误
(6) 在进行复杂查询语句的拼接的时候,建议加上"where 1=1",当然在不考虑数据库的性能.
(7)try{}catch(Exception e){} finally{if(conn!=null){conn.colse();conn==null}}在使用数据库操作的
时候尽量多用finally语句,进行资源的释放。
(8) 在进行多异常捕获的时候,最后建议加上Exception异常做没有考虑到的异常捕获,比如
try{}catch(OtherException e){}catch(Exception e){} finally{if(conn!=null){conn.colse();conn==null}}
(9) 给每个if(condition){}都加上大括号,即使里面只有一句话,加强程序的可读性
(10)能用常量的东西都要用常量来完成,避免使用硬编码,增加可维护性质。比如少用 String str = "123"
使用private static final CONST = "123" ; String str = CONST;
(11) 定义的静态的常量用全大写,方法名开头用小写,类名用大写。在bean中定义的变量名用小写,并且所有的名字
命名要体现出业务的特性。呵呵,这里说到了规范。。。
(12) 多看看Apache下的一些Utils包吧!方便实用,必备工具!
(13) 可以用for(int i= 100;i>0;i--;)去代替for(int i = 0;i <100;i++) 这样可以提高程序的运行速度
(14) 写注释有助于写出逻辑清晰的代码
(15) 用字符分隔多字符串时,为了防止字符串中有设定的分隔符,我采用如下字符进行分隔 (c#的,JAVA也差不多)
char char2 = '\x0012'; string strreg = ""; strreg += char2;