综合征管信息系统代码走查规范文档编号:当前版本: 1.0修改日期:2010年8月18日一、JA V A编程规范 (3)1、变量定义问题 (3)2、变量命名规则 (3)3、变量的声明和初始化(I NITIALIZATION) (3)4、换行(W RAPPING L INES) (4)5、M AP对象使用问题 (4)6、EQUALS方法使用问题 (5)7、IMPORT多余包问题 (5)8、N ULL P OINTER E XCEPTION问题 (6)9、关于对象声明问题 (7)10、注释 (7)11、访问静态变量或方法 (8)12、使用静态变量 (8)13、I F语句 (8)14、J A V A源文件的长度 (8)15、方法的长度 (8)二、项目开发规范 (8)1、J A V A文件命名规则 (8)2、JSP代码规范 (9)3、CTRL代码规范 (14)4、E VENT &VO&BO (17)5、P ROXY代码规范 (18)6、日志 (20)7、异常处理 (21)8、缓存 (22)一、J A V A编程规范1、变量定义问题如果定义的变量只是在某个局部内使用,就在局部内定义,不要在局部外定义。
问题代码:// 返回的明细信息放到vo里传到前台MAmkdjVO mamkdjVO = new MAmkdjVO();//如果找到详细信息的记录,就展现if (responseEvent.getFindNoRecordFlag() == "1") {mamkdjVO = responseEvent.getDetailVO();更正代码:(mamkdjVO只是在if条件内使用,只需要自if内定义即可) //如果找到详细信息的记录,就展现if (responseEvent.getFindNoRecordFlag() == "1") {// 返回的明细信息放到vo里传到前台MAmkdjVO mamkdjVO = responseEvent.getDetailVO();2、变量命名规则1、禁用差别不大(只有一个或少数几个字母不同)的名称例如:hiThere和hiThre2、在名称中禁用下划线字符('_')3、变量的声明和初始化(Initialization)1、避免声明的局部变量覆盖上一级声明的变量2、尽量在声明局部变量的同时初始化。
4、换行(Wrapping Lines)当一个表达式无法容纳在一行内时,可以依据如下一般规则断开之:- 在一个逗号后面断开- 在一个操作符前面断开- 宁可选择较高级别(higher-level)的断开,而非较低级别(lower-level)的断开- 新的一行应该与上一行同一级别表达式的开头处对齐- 如果以上规则导致你的代码混乱或者使你的代码都堆挤在右边,那就代之以缩进8个空格。
5、Map对象使用问题Map对象遍历通常使用主键值循环遍历,一般不使用值对象循环遍历。
问题代码://用Iterator 实现遍历Iterator keyValuePairs = conditionMap.entrySet().iterator();//开始遍历条件mapwhile (keyValuePairs.hasNext()) {Map.Entry conditionEntry = (Map.Entry) keyValuePairs.next();更正代码://用Iterator 实现遍历Iterator keySet = conditionMap.keySet().iterator();//开始遍历条件mapwhile (keySet.hasNext()) {String key = (String) keySet.next();//可以直接造型成实际对象Object keyValue = conditionMap.get(key);6、equals方法使用问题使用equals方法进行比较的时候,把不为空的对象放在前面,避免NullPointerException异常。
问题代码://数据库中存在记录 1代表存在记录 0代表不存在if (responseEvent.getFindNoRecordFlag().equals("1")) {更正代码://数据库中存在记录 1代表存在记录 0代表不存在if ("1".equals(responseEvent.getFindNoRecordFlag())) {7、import多余包问题每个java代码,提交前应该检查是否import没有使用的类,可以使用CTRL+SHIFT+O快捷键整理。
问题代码:8、NullPointerException问题所有的公共方法必须考虑null对象参数,根据实际需要,要对传入的参数作非空校验。
问题代码:public static void vo2bo(SwordBaseValueObject swordVO,CTPBaseBusinessObject ctpBO) {// 获得VO、BO的方法名Method[] boSetMethods = ctpBO.getClass().getMethods();Method[] voMethods = swordVO.getClass().getMethods();更正代码:public static void vo2bo(SwordBaseValueObject swordVO, CTPBaseBusinessObject ctpBO) {//空对象判断,否则就有可能出现NullPointerExceptionIf(swordVO == null || ctpBO == null){return;}// 获得VO、BO的方法名Method[] boSetMethods = ctpBO.getClass().getMethods();Method[] voMethods = swordVO.getClass().getMethods();9、关于对象声明问题声明的对象如果不使用应该去掉10、注释(1)所有的类都要有注释模板/***<p>Title:</p>*<p>Description:</p>*<p>Copyright:Copyright(c)2008-2012</p>*<p>Company:中国软件与技术服务股份有限公司</p>*<p>@author${user}</p>* <p>@version 1.0</p>*/(2)类中方法要有注释模板/***<p>Description:</p>*<p>@author${user}</p>*${tags}*/(3)方法内必要的注释// 注释(关键步骤的说明)11、访问静态变量或方法避免用一个对象访问一个类的静态变量或方法,而应该用类名代替。
12、使用静态变量程序中应尽可能少使用数字(或字符),尽可能定义静态变量来说明该数字(或字符)的含义。
程序中需要赋值或比较时,使用前面定义的静态变量13、If语句if语句总是用“{”和“}”括起来,即使语句体中只包含一条语句。
14、Java源文件的长度在一个java类中代码行数尽量不要超过1000行15、方法的长度方法中代码行数尽量不要超过200行二、项目内部开发规范1、Java文件命名规则(1)、JA V A文件命名规则(2)、其他相关文件命名规则对于名字较长的用例,拼音简写可以采用抽取适当关键词语的方法,以减少JA V A 文件名的长度。
所属大类标识有以下几种: 举例:2、 JSP代码规范(4) Jsp 文件命名规则a 、jsp 程序主页面程序文件命名规则b、其他相关页面文件命名规则c、jsp中为实现具体的业务逻辑和校验而自己定义的Javascript方法,命名不要用太过简单的名字如:save,submit,check…..,因为页面引入的JS库或者其他人的页面可能包含了成千上万了Funtion,很有可能和已有的方法重名,且出了问题不易查找。
建议方法1.可以用用例的缩写+$+方法名,如:纳税人登记的保存方法,nsrdj$save(),仅供参考。
2.json形式的命名空间。
如:<script type=”text/javascript”>Var nsrdj = {};Nsrdj.save = function(){// code;};Nsrdj.query = function(){// code;};// 调用Nsrdj.save(),Nsrdj.query()</script>仅供参考!(5)头文件的引入JSP文件中,对于头文件应该在html标签之前引入问题代码:(6)尽量不要自己定义css样式,用架构提供的样式问题代码:更正后代码:删除自定义的样式,在元素中用class="tdsectionbar"来赋值,以保持界风格的统一(7)特定隐藏域一般将隐藏域,如:viewXML和selectXml,添加到body标签之后。
问题代码:(8)JSP中不允许使用java代码问题代码:(9)避免重复加载JS文件在加载js脚本文件时,先确定header.jsp是否引入,如果引入,不需要重新加载。
clsDynamicSelect$init("selectXml");代码下拉表用IE缓存方式去加载sysCtrl.initViewPage(); 完成功能?(10)请求提交方式Jsp页面中尽量不要用form提交,用ajax提交,保持页面不要刷新,以达到更好用户感受。
如果必须用form提交,建议使用隐藏iframe帧的形式提交,以达到不刷新的目的。
(11)页面代码转名称项目组提供了统一的页面代码转名称组件,不需要使用c:if标签硬编码问题代码:修改后代码:加载页面,在初始化方法中加入: clsDynamicSelect$codeToName(["khlxDm","khdlDm","ssgwDm","khmkDm"]);(12)中文乱码问题在Jsp中,如果以get方式提交,在url拼接参数时,最好用URIENCODECOMPONENT编码,以避免乱码的出现。
(13)下拉列表Jsp页面中尽量不要使用select下拉列表,而使用框架提供的input下拉列表。