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技术部规范描述技术部•提供文件注释,列出:版权说明、版本号、生成日期、作者、模块目的、功能、修改日志等信息。文件注释应放在package之前。说明:姓名使用汉语姓名。示例:/**Copyright(C),TODO**/技术部类注释放在class或者interface关键字之前•类注释放在class或者interface关键字之前,import关键字之后。注释使用“/***/”注释方式。技术部公有方法格式公有和保护方法注释内容:列出方法的一句话功能简述、功能详细描述、输入参数、输出参数、返回值、异常等。技术部异常注解技术部中文问题•描述:代码里不能有中文,除了注释错误的代码:if(topDomainSelection.equals(请选择一个顶级域名,免费开通旺铺)){正确的代码:if(topDomainSelection.equals(“none”)){比如有中文时:需要把中文放到xml或properties文件中,java类引用22技术部构造数字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);}}技术部•说明:涉及物理状态或者含有物理意义的常量,不应直接使用数字或单个字母,必须用有意义的静态常量或者枚举来代替。•常量名使用全大写的英文描述,英文单词之间用下划线分隔开,并且使用staticfinal修饰。•示例:•publicstaticfinalintPAGE_SIZE=10;•publicstaticfinalStringDEFAULT_START_DATE=2001-12-08;技术部说明:使用Stringcustomers[]格式使程序的可读性较差,String[]customers表示声明了一个String数组(String[])叫做customers示例:如下程序可读性差:publicStringgetCustomers()[]{....}如下程序可读性好:publicString[]getCustomers(){....}数组声明技术部编码规则•使用自动装箱或静态工厂方法valueOf代替包装类构造函数说明:new一个对象时会创建一个新的对象。根据SUN公司说明,使用自动装箱或静态工厂方法比使用new一个对象快3.5倍。该规则可以用在有valueOf或其它静态工厂的调用中。如Long,Integer,Short,Character,Byte和Boolean。不推荐的写法:if(rs.next()){bean.setCataLogId(newLong(rs.getLong(CATALOG_ID)));bean.setCatgroupId(newLong(rs.getLong(CATGROUP_ID)));bean.setBrandCode(rs.getString(BRANDCODE));bean.setSubTotal(newInteger(rs.getInt(SUBTOTAL)));returnbean;}规范的写法:if(rs.next()){bean.setCataLogId(Long.valueOf(rs.getLong(CATALOG_ID)));bean.setCatgroupId(Long.valueOf(rs.getLong(CATGROUP_ID)));bean.setBrandCode(rs.getString(BRANDCODE));bean.setSubTotal(Integer.valueOf(rs.getInt(SUBTOTAL)));returnbean;}技术部面向接口编程•面向接口编程,使用接口声明不推荐方式:ArrayListStringlist=newArrayListString();推荐方式:ListStringlist=newArrayListString();技术部IO操作•不要使用System.out与System.err进行控制台打印,应该使用日志工具类进行统一记录或者打印。不推荐方式:…}catch(Exceptionexp1){System.out.println(Problemoccuredwhenprocessfile:+remoteFileName);exp1.printStackTrace();}catch(SocketExceptionexp2){System.out.println(Problemoccuredwhenprocessfile:+remoteFileName);exp2.printStackTrace();}}catch(IOExceptionexp3){System.out.println(Problemoccuredwhenprocessfile:+remoteFileName);exp3.printStackTrace();}推

1 / 78
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功