代码开发规范.docx

上传人:lao****ou 文档编号:265619 上传时间:2023-07-07 格式:DOCX 页数:18 大小:31.56KB
下载 相关 举报
代码开发规范.docx_第1页
第1页 / 共18页
代码开发规范.docx_第2页
第2页 / 共18页
代码开发规范.docx_第3页
第3页 / 共18页
代码开发规范.docx_第4页
第4页 / 共18页
代码开发规范.docx_第5页
第5页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《代码开发规范.docx》由会员分享,可在线阅读,更多相关《代码开发规范.docx(18页珍藏版)》请在第一文库网上搜索。

1、代码开发规范XXXXX科技有限公司2021年7月02日本规范根据研发中心实践过程中经验累积,结合美团、阿里等大厂公开规范 整理出一套Java编码规范,为Java开发人员提供规范与指引。要求:公司所有研发人员在进行代码编写时,务必遵照此规范。建议:欢迎各位同事在日常工作中,总结经验、提出建议、完善此规范。修订记录序号提交者更新日期更新内容1XXX2021-07-02文件新建2345一、JaVa编码规范L通用规范1)类名首字母应该大写。字段、方法以及对象(句柄)的首字母应小写。对 于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字 母。例如:Thi SlsAClassNamet

2、hiSlsMethodOrFieldName若在定义中出现了常数初始化字符,则大写StatiC final基本类型标识符 中的所有字母。这样便可标志出它们属于编译期的常数。JaVa包(Package)属于一种特殊情况:它们全都是小写字母,即便中间的单词亦 是如此。对于域名扩展名称,如com, org, net或者edu等,全部都应小写(这也是Java 1. 1和JaVa 1.2的区别之一)。(2)应将方法设计成简要的、功能性单元,用它描述和实现一个不连续的类 接口部分。理想情况下,方法应简明扼要。若长度很大,可考虑通过某种方式将 其分割成较短的几个方法。这样做也便于类内代码的重复使用(有些时候

3、,方法 必须非常大,但它们仍应只做同样的一件事情)。(3)设计一个类时,请设身处地为客户、程序员考虑一下(类的使用方法应 该是非常明确的)。然后,再设身处地为管理代码的人考虑一下(预计有可能进 行哪些形式的修改,想想用什么方法可把它们变得更简单)(4)使类尽可能短小精悍,而且只解决一个特定的问题。下面是对类设计的 一些建议: 一个复杂的开关语句:考虑采用多形机制数量众多的方法涉及到类型差别极大的操作:考虑用几个类来分别实 现许多成员变量在特征上有很大的差别:考虑使用几个类(5)让一切东西都尽可能地私有一PriVate。可使库的某一部分公共化 (一个方法、类或者一个字段等等),就永远不能把它拿出

4、。若强行拿出,就可 能破坏其他人现有的代码,使他们不得不重新编写和设计。若只公布自己必须公 布的,就可放心大胆地改变其他任何东西。在多线程环境中,隐私是特别重要的 一个因素一只有private字段才能在非同步使用的情况下受到保护(6)用继承及方法覆盖来表示行为间的差异,而用字段表示状态间的区别。 一个非常极端的例子是通过对不同类的继承来表示颜色,这是绝对应该避免的: 应直接使用一个“颜色”字段(7)警惕分析瘫痪。请记住,无论如何都要提前了解整个项目的状况,再 去考察其中的细节。由于把握了全局,可快速认识自己未知的一些因素,防止在 考察细节的时候陷入死逻辑中(8)警惕过早优化。首先让它运行起来,

5、再考虑变得更快一但只有在自己 必须这样做、而且经证实在某部分代码中的确存在一个性能瓶颈的时候,才应进 行优化。除非用专门的工具分析瓶颈,否则很有可能是在浪费自己的时间。性能 提升的隐含代价是自己的代码变得难于理解,而且难于维护请记住,阅读代码的时间比写代码的时间多得多。思路清晰的设计可获得易 于理解的程序,但注释、细致的解释以及一些示例往往具有不可估量的价值。无 论对你自己,还是对后来的人,它们都是相当重要的。如对此仍有怀疑,那么请 试想自己试图从联机Java文档里找出有用信息时碰到的挫折,这样或许能将你 说服。2.命名规范1 .代码中的命名均不能以特殊字符(如下划线、$#符号)开始或结束。反

6、例:_name / Object2 .代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文 的方式。反例: toubao / Iipei3 .类名使用UpperCamelCase风格,必须遵从驼峰形式。正例:CommonUtils / BaseVo4 .方法名、参数名、成员变量、局部变量都统一-使用IOWerCaIneICaSe风格,必须遵从驼峰形式。正例: OrderSerViCe / getOrderServiceO5 .常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不 要嫌名字长。正例:ZK_CONFIG_ROOTNODE6 .抽象类命名使用AbStraCt或Ba

7、Se开头;异常类命名使用EXCePtiOn结 尾;测试类命名以它要测试的类的名称开始,以TeSt结尾。7 .包名使用com. zdgy.服务名.分层名。正例:OaUth 系统的 DAO, com. zdgy. oauth. dao8 .如果使用到了设计模式或具有明确职责,建议在类名中体现出具体模式 或职责。正例:ExecutorFactory / AbstractProducer9 .各分层都需要接口和实现类,实现类用ImPl作后缀与接口区别。正例:OrderServiceImpl 实现 OrderSerViCe 接口。10 .枚举类名建议带上EnUm后缀,枚举成员名称需要全大写,单词间用下

8、划线隔开。正例:枚举名字:PolicyIdTypeEnum,成员名称:ID_CARD/ PASSPORT011 .各层方法命名规范:1)查询的方法用get/ que”做前缀。2)插入的方法用add或insert做前缀。3)删除的方法用remove或delete做前缀。4)修改的方法用modify/ UPdate做前缀。5)获取多个对象的方法用List做结尾。6)获取统计值的方法用C。Unt做结尾。12 .全局常量类名建议“模块名ConStant”。正例:枚举名字:OrderCOnStant / ConimonConstants013 .不要出现任何魔法值(即未经定义的常量)直接出现在代码中,应

9、作常 量声明。反例:return UNDERWRITE_RESULT_ + order_no;3 . OOP规范1 .对外暴露的接口签名,原则上不允许修改方法签名,避免对接口调用方产 生影响。2 .序列化类新增属性时,请不要修改SeriaIVerSionUID字段,避免反序列 失败;如果完全不兼容升级,避免反序列化混乱,那么请修改 SerialVersionUID 值。说明:注意SeriaIVerSionUID不一致会抛出序列化运行时异常。3 .当一个类有多个构造方法,或者多个同名方法,这些方法应该按顺序放置 在一起,便于阅读。4 . POJO类中变量需要有get/set方法,通过使用IDE

10、Generate自动生成。5 .循环体内字符串的联接方式,使用StringBuilder的append方法进行扩 展。6 . final可提高程序响应效率,声明成final的情况:D不需要重新赋值的变量,包括类属性、局部变量。2)对象参数前加final,表示不允许修改引用的指向。3)类方法确定不允许被重写。7 .慎用Object的clone方法来拷贝对象。说明:对象的clone方法默认是 浅拷贝,若想实现深拷贝需要重写clone方法实现属性对象的拷贝8 .不要在foreach循环里进行元素的remove/add操作。remove元素请使用 Iterator方式,如果并发操作,需要对Iterat

11、or对象加锁9 .使用en!ySet遍历MaP类集合KV,而不是keySet方式进行遍历。说明: keySet其实是遍历了 2次,一次是转为Iterator对象,另一次是从 hashMap中取出key所对应的value0而entrySet只是遍历了一次就把 key和value都放到了 entry中,效率更高。如果是JDK8,使用Map. foreach 方法。正例:VaIUeS()返回的是V值集合,是一个IiSt集合对象;keySet()返回 的是K值集合,是一个Set集合对象;entrySet ()返回的是KT值组合集合11.高度注意Map类集合K/V能不能存储null值的情况,如下表格:集

12、合类KeyValueSuper说明Hashtable不允许为 null不允许为 nullDictionary线程安全ConcurrentH ashMap不允许为 null不允许为 nullAbstractMa P分段锁技术TreeMap不允许为 null允许为nullAbstractMaP线程不安全HashMap允许为null允许为nullAbstractMaP线程不安全4.控制规范1 .在一个switch块内,每个case要么通过break/return等来终止,要么 注释说明程序将继续执行到哪一个case为止;在一个SWitCh块内,都必须包含一个default语句并且放在最后,即使它 什

13、么代码也没有。2 .在ifelseforWhiIe/do语句中必须使用大括号,即使只有一行代码, 避免使用下面的形式:if (condition) statements;3 .除常用方法(如getXxx/isXxx)等外,不要在条件判断中执行其它复杂的 语句,将复杂逻辑判断的结果赋值给一个有意义的布尔变量名,以提高可 读性。4 .循环体中的语句要考量性能,以下操作尽量移至循环体外处理,如定义对 象、变量、获取数据库连接,进行不必要的try-catch操作(这个try- catch 是否可以移至循环体外)。5 .方法中需要进行参数校验的场景:1)调用频次低的方法。2)执行时间开销很大的方法,参数

14、校验时间几乎可以忽略不计,但如果 因为参数错误导致中间执行回退,或者错误,那得不偿失。3)需要极高稳定性和可用性的方法。4)对外提供的开放接口,不管是RPC/API/HTTP接口。5)敏感权限入口。5.并发规范获取单例对象需要保证线程安全,其中的方法也要保证线程安全。说明: 资源驱动类、工具类、单例工厂类都需要注意;1 .创建线程或线程池时请指定有意义的线程名称,方便出错时回溯;2 .线程资源必须通过线程池提供,不允许在应用中自行显式创建线程;3 . SimpleDateFormat是线程不安全的类,一般不要定义为StatiC变量,如 果定义为Static,必须加锁,或者使用DateUtiIS

15、工具类;正例:注意线程安全,使用DateUtils。亦推荐如下处理:private static final ThreadLocal df = new ThreadLocal() Overrideprotected DateFormat initialValue() return new SimpleDateFormat (zzyyyy-MM-dd/,););说明:如果是JDK8的应用,可以使用InStant代替Date, LocalDateTime 代替 CaIendar, DateTimeFornIatter 代替 SimPledatefOrnIatter,官方给出的 解释:simple beautiful strong immutable thread-safe04 .高并发时,同步调用应该去考量锁的性能损耗。能用无锁数据结构,就不 要用锁;能锁区块,就不要锁整个方法体;能用对象锁,就不要用类锁;5 .对多个资源、数据库表、对象同时加锁时,需要保持一致的加锁顺序,否 则可能会

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

当前位置:首页 > 应用文档 > 汇报材料

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服