您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业财务 > Java编码规范【终极版】
技术部编码小贴士CodingTips技术部目录结构1.编码规范篇2.项目结构篇3.java基础篇4.java性能篇5.java线程篇6.java设计篇7.codereview篇8.数据库篇9.模板篇10.开发运维篇11.数据库设计命名规范篇12.其他篇技术部编码规范篇3技术部命名规范•Package命名包名称全部小写,包的路径符合所开发的系统模块的定义,尽量使用单一职责原则所有五阿哥的包路径命名为com.wuage.xx(其中xx为具体业务相关)比如:com.wuage.sellercom.wuage.crmcom.wuage.order•类名类名首字母应该大写。全局变量、方法以及所有标识符(如参数、局部变量)的首字母应小写,且使用驼峰法。命名满足见名知意4技术部命名规范•接口采用完整的英文描述符说明接口封装,所有单词的第一个字母大写。习惯上,名字前面加上大写的I,遵守单一职责原则及接口隔离原则比如:interfaceIraster•方法方法采用完整的英文描述说明成员方法功能,第一个单词尽可能采用一个生动的动词,尽量满足见名知意且注意使用设计原则比如:sayHello()getName()run()5技术部命名规范•常量字段一般全部采用大写字母,单词之间用下划线分隔(也有特例,如Java类库中关于颜色的常数没有严格地全部使用大写字母)比如:staticfinalintMIN_WIDTHstaticfinalintMAX_WIDTH•变量字段采用驼峰标示法,遵守见名知意原则比如:intmyIndex6技术部组合语句•错误代码if(condition)statement1;if(condition1)if(condition2)statement2;elsestatement3;•正确代码if(condition){statement1;}if(condition1){if(condition2){statement2;}}else{statement3;}7技术部DAO层命名规范•DAO接口全部以I开始以DAO结束,如IUserDAO.java•DAO实现类全部以IBatis开始以Impl结束并继承DAO接口如:IBatisUserDAOImpl.java•实体全部以Model结尾如:UserModel8技术部service设计规范•读写分离接口写接口以I开始OperateService结束,比如IUserOperateService.java读接口以I开始QueryService结束,比如IUserQueryService.java实现类以OperateServiceImpl或者QueryServiceImpl结束,比如UserQueryServiceImpl.java•自包含•尽量捕获异常输出日常并返回业务方错误的code9技术部使用正确的codeformat•制作codetemplate和codeformat文件•打开Eclipse,导入code-style/codeformat.xml10技术部Eclipsecodetempaltes11技术部Eclipsecodetempaltes-autoadd12技术部EclipseSaveActions13技术部141、应用名中用_来连接,2子工程的命名是用.如:这个应用是叫wuage_web里面的子工程可以叫wuage_web.config注意:2、autoconfig的文件需要放在src/main/resource中,或者是在war中Java工程命名技术部java文件目录结构•使用标准maven结构,具体package待定15技术部Java基础篇16技术部规范描述•单行长度不超过120个字符,多于120个字符进行换行,操作符放在新行之首;新行要进行相应的缩进,至少不能少于8个字符。•不允许把多个短语句写在一行中,即一行只写一条语句。•if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要加括号{}。•相对独立的程序块之间、变量说明之后必须加空行技术部•提供文件注释,列出:版权说明、版本号、生成日期、作者、模块目的、功能、修改日志等信息。文件注释应放在package之前。说明:姓名使用汉语姓名。示例:/**Copyright(C),TODO**/技术部类注释放在class或者interface关键字之前•类注释放在class或者interface关键字之前,import关键字之后。注释使用“/***/”注释方式。说明:注释主要是一句话功能简述与功能详细描述。注释可根据需要列出:作者、内容、功能、与其它类的关系等。功能详细描述部分说明该类或者接口的功能、作用、使用方法和注意事项,每次修改后增加作者和更新版本号和日期,@since表示从那个版本开始就有这个类或者接口,@deprecated表示不建议使用该类或者接口。/***〈一句话功能简述〉*〈功能详细描述〉*@author[作者](必须,使用汉语)*@see[相关类/方法](可选)*@since[产品/模块版本](可选)*@deprecated(可选)*/代码示importjava.blah.blahdy.Blah;/***Blah类处理订单业务流程.*全部为静态变量和静态方法,对外提供统一接口。提供了订单保存,*订单业务处理,查询等功能。**@author张三*@seeOrderCmd*@since*/publicclassBlahextendsSomeClass{}技术部公有方法格式公有和保护方法注释内容:列出方法的一句话功能简述、功能详细描述、输入参数、输出参数、返回值、异常等。/***〈一句话功能简述〉*〈功能详细描述〉*@param[参数1][参数1说明]*@param[参数2][参数2说明]*@return[返回类型说明]*@exception/throws[异常类型][异常说明]*@see[类、类#方法、类#成员]*@since[起始版本]*@deprecated*/说明:@since表示从那个版本开始就有这个方法,如果是最初版本就存在的方法无需说明;@exception或throws列出可能抛出的异常;@deprecated表示不建议使用该方法。示例:/***根据日志类型和时间读取日志。*分配对应日志类型的LogReador,指定类型、查询时间段,*读取日志记录。查询条件为null或0的表示没有限制。*查询时间为左包含原则,即[startTime,endTime)。*@paramlogTypeName日志类型名(在配置文件中定义的)*@paramstartTime查询日志的开始时间*@paramendTime查询日志的结束时间*@paramlogLevel查询日志的级别*@return结果集,日志反复器*@since1.2*/publicstaticLogIteratorread(StringlogType,DatestartTime,DateendTime,intlogLevel)技术部异常注解•对于方法内部用throw语句抛出的异常,必须在方法的注释中标明,对于所调用的其他方法所抛出的异常,选择主要的在注释中说明。对于非RuntimeException,即throws子句声明会抛出的异常,必须在方法的注释中标明。•说明:异常注释用@exception或@throws表示,在JavaDoc中两者等价,但推荐用@exception标注Runtime异常,@throws标注非Runtime异常。异常的注释必须说明该异常的含义及什么条件下抛出该异常。技术部中文问题•描述:代码里不能有中文,除了注释错误的代码:if(topDomainSelection.equals(请选择一个顶级域名,免费开通旺铺)){正确的代码:if(topDomainSelection.equals(“none”)){比如有中文时:需要把中文放到xml或properties文件中,java类引用22技术部构造数字•描述:使用Number.valueOf()构造一个数字,而不是new错误代码Longl=newLong(100);正确代码Longl=Long.valueOf(100);同理适用于其他Number类型。此处主要是基于性能考虑,java在大于128或者是小于-128时此方法不具体任何优势23技术部在finally中释放资源•描述:在finally中释放资源——数据库连接、打开的文件等//关闭文件OutputStreamostream=null;try{ostream=newFileOutputStream(file);ostream.write(…);}finally{if(ostream!=null){try{ostream.close();}catch(IOExceptione){}}}//关闭数据库连接Connectionconn=getConnection();try{…}finally{conn.close();}推荐尽量使用java7的新特性try-with-resources24技术部集合交集•描述:怎么取两个集合的交集,需要两个for循环错误代码for(inti=0;iidArray.length;i++){while(checkedIdIt.hasNext()){StringcheckedId=checkedIdIt.next();if(StringUtil.equals(idArray[i],checkedId)){sorttedIdArray.add(checkedId);checkedIdIt.remove();break;}}}正确代码list1.retainAll(list2);此处应该加上包含同种数据类型数据,建议使用下面语句,最好使用apacheutil类25技术部修饰符•修饰符应该按照如下顺序排列:•public,protected,默认,private,abstract,static,final,transient,volatile,synchronized,native。•类与接口的声明顺序:•静态成员变量/StaticFields•静态初始化块/StaticInitializers•成员变量/Fields•初始化块/Initializers•构造器/Constructors•静态成员方法/StaticMethods•成员方法/Methods•重载自Object的方法如toString(),hashCode()和main方法•类型(内部类)/Types(InnerClasses)•注意:同等的类型,按public,protected,默认,private的顺序排列,实现同一功能的多个方法应放在一起,如果两个规则有冲突,以后一条为准。技术部•描述:禁止使用魔法数字及字母,用有意义的常量名来替代错误代码正确代码27privatefinalstaticStringTRUNK_IDLE=S;StringorderNo=stat.getOrderNo();if(TRUNK_IDLE.equals(String.valueOf(orderNo.charAt(0)))){orderNo=orderNo.substring(1);if(orderNo.matches(^[0-9]{1,}$)){stat.setOrderNo(orderNo);statusForUpt.add(stat);}}StringorderNo=stat.getOrderNo();if(S.equals(String.valueOf(orderNo.charAt(0)))){orderNo=orderNo.substring(1);if(orderNo.matches(^[0-9]{1,}$)){stat.setOrderNo(orderNo);statussForUpt.add(stat);}}技术部•说明:
本文标题:Java编码规范【终极版】
链接地址:https://www.777doc.com/doc-6372390 .html