收藏 分享(赏)

java代码规范详细版.doc

上传人:精品资料 文档编号:9529747 上传时间:2019-08-12 格式:DOC 页数:14 大小:167.50KB
下载 相关 举报
java代码规范详细版.doc_第1页
第1页 / 共14页
java代码规范详细版.doc_第2页
第2页 / 共14页
java代码规范详细版.doc_第3页
第3页 / 共14页
java代码规范详细版.doc_第4页
第4页 / 共14页
java代码规范详细版.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

1、产品二科Java 代码规范本 Java 代码规范以 SUN 的标准 Java 代码规范为基础,为适应我们公司的实际需要,可能会做一些修改。本文档中没有说明的地方,请参看 SUN Java 标准代码规范。如果两边有冲突,以 SUN Java 标准为准。1. 标识符命名规范1.1 概述标识符的命名力求做到统一、达意和简洁。尽量做到每个人按照规范来,多人开发如一人开发一样。1.1.1 统一统一是指,对于同一个概念,在程序中用同一种表示方法,比如对于供应商,既可以用supplier,也可以用 provider,但是我们只能选定一个使用,至少在一个 Java 项目中保持统一。统一是作为重要的,如果对同一

2、概念有不同的表示方法,会使代码混乱难以理解。即使不能取得好的名称,但是只要统一,阅读起来也不会太困难,因为阅读者只要理解一次。1.1.2 达意达意是指,标识符能准确的表达出它所代表的意义,比如: newSupplier, OrderPaymentGatewayService 等;而 supplier1, service2,idtts 等则不是好的命名方式。准确有两成含义,一是正确,而是丰富。如果给一个代表供应商的变量起名是 order,显然没有正确表达。同样的,supplier1, 远没有 targetSupplier 意义丰富。1.1.3 简洁简洁是指,在统一和达意的前提下,用尽量少的标识符

3、。如果不能达意,宁愿不要简洁。比如:theOrderNameOfTheTargetSupplierWhichIsTransfered 太长, transferedTargetSupplierOrderName 则较好,但是 transTgtSplOrdNm 就不好了。省略元音的缩写方式不要使用,我们的英语往往还没有好到看得懂奇怪的缩写。1.1.4 骆驼法则产品二科Java 中,除了包名,静态常量等特殊情况,大部分情况下标识符使用骆驼法则,即单词之间不使用特殊符号分割,而是通过首字母大写来分割。比如: supplierName, addNewContract,而不是 supplier_name,

4、 add_new_contract。1.1.5 英文 vs 拼音尽量使用通俗易懂的英文单词,如果不会可以向队友求助,实在不行则使用汉语拼音,避免拼音与英文混用。比如表示归档,用 archive 比较好, 用 pigeonhole 则不好,用guiDang 尚可接受。1.2 包名使用小写字母如 com.amerisia.ebills,不要 com.amerisia.Ebills单词间不要用字符隔开,比如 com.amerisia.ebills,而不要 com.amerisia.ebills _util1.3 类名1.3.1 首字母大写类名要首字母大写,比如 LCIssueInfoManagerE

5、JB, LCIssueAction;不要 lcIssueInfoManagerEJB, lcIssueAction.1.3.2 后缀类名往往用不同的后缀表达额外的意思,如下表:后缀名 意义 举例EJB 表示这个类为 EJB 类 LCIssueInfoManagerEJBService表明这个类是个服务类,里面包含了给其他类提同业务服务的方法 PaymentOrderServiceImpl 这个类是一个实现类,而不是接口 PaymentOrderServiceImplInter 这个类是一个接口 LifeCycleInterDao 这个类封装了数据访问方法 PaymentOrderDaoActi

6、on 直接处理页面请求,管理页面逻辑了类 UpdateOrderListActionListener 响应某种事件的类 PaymentSuccessListenerEvent 这个类代表了某种事件 PaymentSuccessEventServlet 一个 Servlet PaymentCallbackServletFactory 生成某种对象工厂的类 PaymentOrderFactory产品二科Adapter 用来连接某种以前不被支持的对象的类 DatabaseLogAdapterJob 某种按时间运行的任务 PaymentOrderCancelJobWrapper 这是一个包装类,为了给

7、某个类提供没有的能力 SelectableOrderListWrapperBean 这是一个 POJO MenuStateBean1.4 方法名首字母小写,如 addOrder() 不要 AddOrder()动词在前,如 addOrder(),不要 orderAdd()查询方法要查询的内容在前,条件在后。 如 getXxByXx()动词前缀往往表达特定的含义,如下表:前缀名 意义 举例create 创建 createOrder()delete 删除 deleteOrder()add 创建,暗示新创建的对象属于某个集合 addPaidOrder()remove 删除 removeOrder()i

8、nit 或则initialize初始化,暗示会做些诸如获取资源等特殊动作 initializeObjectPooldestroy销毁,暗示会做些诸如释放资源的特殊动作 destroyObjectPoolopen 打开 openConnection()close 关闭 closeConnection() b ) /do something here;2.6.2.2 运算符两边用一个空格隔开例如:不要写成:2.6.2.3 逗号语句后如不换行,紧跟一个空格如下:call(a, b, c);不能如下:call(a,b,c);产品二科2.6.3 空行的使用空行可以表达代码在语义上的分割,注释的作用范围,

9、等等。将类似操作,或一组操作放在一起不用空行隔开,而用空行隔开不同组的代码, 如图:上例中的空行,使注释的作用域很明显. 连续两行的空行代表更大的语义分割。 方法之间用空行分割(尽量用一行空行) 域之间用空行分割 超过十行的代码如果还不用空行分割,就会增加阅读困难3. 注释规范3.1 注释 vs 代码 注释宜少二精,不宜多而滥,更不能误导 命名达意,结构清晰, 类和方法等责任明确,往往不需要,或者只需要很少注释,就可以让人读懂;相反,代码混乱,再多的注释都不能弥补。所以,应当先在代码本身下功夫。 不能正确表达代码意义的注释,只会损害代码的可读性。 过于详细的注释,对显而易见的代码添加的注释,罗

10、嗦的注释,还不如不写。 注释要和代码同步,过多的注释会成为开发的负担3.2 Java Doc表明类、域和方法等的意义和用法等的注释,要以 javadoc 的方式来写。Java Doc 是个类的使用者来看的,主要介绍 是什么,怎么用等信息。凡是类的使用者需要知道,都要用产品二科Java Doc 来写。非 Java Doc 的注释,往往是个代码的维护者看的,着重告述读者为什么这样写,如何修改,注意什么问题等。 如下:类3.3 块级别注释3.3.1 块级别注释,单行时用 /, 多行时用 /* */。3.3.2 较短的代码块用空行表示注释作用域3.3.3 较长的代码块要用/*- start: -*/和

11、/*- end: -*/包围3.4 行内注释行内注释用 / 写在行尾4 最佳实践和禁忌4.1 每次保存的时候,都让你的代码是最美的程序员都是懒惰的,不要想着等我完成了功能,再来优化代码的格式和结构,等真的把功能完成,很少有人会再愿意回头调整代码。4.2 使用 log 而不是 System.out.println()产品二科log 可以设定级别,可以控制输出到哪里,容易区分是在代码的什么地方打印的,而System.out.print 则不行。而且,System.out.print 的速度很慢。所以,除非是有意的,否则,都要用 log。至少在提交到 svn 之前把 System.out.print

12、 换成 log。4.3 每个 if while for 等语句,都不要省略大括号看下面的代码:if (a b) a+;如果在以后维护的时候,需要在 a b 时,把 b+,一步小心就会写成:if (a b) a+;b+;这样就错了,因为无论 a 和 b 是什么关系,b+ 都会执行。 如果一开始就这样写:if (a b) a+;相信没有哪个笨蛋会把 b+添加错的。而且,这个大括号使作用范围更明显,尤其是后面那行很长要折行时。4.4 善用 TODO:在代码中加入 /TODO: ,大部分的 ide 都会帮你提示,让你知道你还有什么事没有做。比如:if (order.isPaid() /TODO: 更新

13、订单4.5 在需要留空的地方放一个空语句或注释,告述读者,你是故意的比如:if (!exists(order) ;或:if (!exists(order) /nothing to do产品二科4.6 不要再对 boolean 值做 true false 判断比如:if (order.isPaid() = true) / Do something here不如写成:if (order.isPaid() /Do something here后者读起来就很是 if order is paid, . 要比 if orders isPaid method returns true, 更容易理解4.7 减

14、少代码嵌套层次代码嵌套层次达 3 层以上时,一般人理解起来都会困难。下面的代码是一个简单的例子:public void demo(int a, int b, int c) if (a b) if (b c) doJobA(); else if (b c) if (a b if (a b if (a b) if (b c) doJobA();return;doJobB()return;if (b c) if (a c) doJobC(); 利用子方法,就是将嵌套的程序提取出来放到另外的方法里。4.8 程序职责单一关注点分离是软件开发的真理。人类自所以能够完成复杂的工作,就是因为人类能够将工作分解

15、到较小级别的任务上,在做每个任务时关注更少的东西。让程序单元的职责单一,可以使你在编写这段程序时关注更少的东西,从而降低难度,减少出错。产品二科4.9 变量的声明,初始化和被使用尽量放到一起比方说如下代码:int orderNum= getOrderNum();/do something withou orderNum herecall(orderNum);上例中的注释处代表了一段和 orderNum 不相关的代码。orderNum 的声明和初始化离被使用的地方相隔了很多行的代码,这样做不好,不如这样:/do something withou orderNum hereint orderNum

16、= getOrderNum();call(orderNum);4.10 缩小变量的作用域能用局部变量的,不要使用实例变量,能用实例变量的,不要使用类变量。变量的生存期越短,以为着它被误用的机会越小,同一时刻程序员要关注的变量的状态越少。实例变量和类变量默认都不是线程安全的,局部变量是线程安全的。比如如下代码:public class OrderPayActionprivate Order order;public void doAction() order = orderDao.findOrder();doJob1();doJob2();private void doJob1() doSome

17、thing(order);private void doJob2() doOtherThing(order);上例中 order 只不过担当了在方法间传递参数之用,用下面的方法更好:public class OrderPayActionpublic void doAction() 产品二科order = orderDao.findOrder();doJob1(order);doJob2(order);private void doJob1(Order order) doSomething(order);private void doJob2(Order order) doOtherThing(

18、order);4.11 尽量不要用参数来带回方法运算结果比如:public void calculate(Order order) int result = 0;/do lots of computing and store it in the resultorder.setResult(result);public void action() order = orderDao.findOrder();calculate(order);/ do lots of things about order例子中 calculate 方法通过传入的 order 对象来存储结果, 不如如下写:public int calculate(Order order) int result = 0;/do lots of computing and store it in the resultreturn result;public void action() order = orderDao.findOrder();产品二科order.setResult(calculate(order);/ do lots of things about order4.12 最后,还是要多些单元测试类,因为单元测试类可以提前发现代码中的好多问题。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报