前言
目前正在出一个阿里巴巴Java开发手册
系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~
在日常开发中,好的编码习惯和代码规范有助于提高代码可读性
,提升团队协作效率
,还利于维护与扩展
,在某些情况下还有利于优化性能
。今天就带着大家一起学习下手册中的内容,学习下Java
开发中的编码规范。
好了, 废话不多说直接开整吧~
注释规范
-
【强制】
类、类属性、类方法的注释必须使用 Javadoc 规范,使用/**内容*/
格式,不得使用// xxx
方式。 说明:在 IDE 编辑窗口中,Javadoc
方式会提示相关注释,生成Javadoc
可以正确输出相应注释;在 IDE中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。 -
【强制】
所有的抽象方法(包括接口中的方法)必须要用 Javadoc 注释、除了返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。 说明:对子类的实现要求,或者调用注意事项,请一并说明。 -
【强制】
所有的类都必须添加创建者和创建日期。 说明:在设置模板时,注意 IDEA 的@author
为${USER}
,而eclipse
的@author
为${user}
,大小写有区别,而日期的设置统一为yyyy/MM/dd
的格式。
正例:
java
/**
* @author xxx
* @date xxxx/xx/xx
*/
-
【强制】
方法内部单行注释,在被注释语句上方另起一行,使用//注释。方法内部多行注释使用/* */
注释,注意与代码对齐 -
【强制】
所有的枚举类型字段必须要有注释,说明每个数据项的用途。 -
【推荐】
与其"半吊子"英文来注释,不如用中文注释把问题说清楚。专有名词与关键字保持英文原文即可。
反例:"TCP 连接超时"解释成"传输控制协议连接超时",理解反而费脑筋。
-
【推荐】
代码修改的同时,注释也要进行相应的修改,尤其是参数、返回值、异常、核心逻辑等的修改。 说明:代码与注释更新不同步,就像路网与导航软件更新不同步一样,如果导航软件严重滞后,就失去了导航的意义 -
【推荐】
在类中删除未使用的任何字段和方法;在方法中删除未使用的任何参数声明与内部变量。 -
【参考】
谨慎注释掉代码。在上方详细说明,而不是简单地注释掉。如果无用,则删除。 说明:代码被注释掉有两种可能性:
1)后续会恢复此段代码逻辑。 2)永久不用。前者如果没有备注信息,难以知晓注释动机。后者建议直接删掉即可,假如需要查阅历史代码,登录代码仓库即可。
10.【参考】
对于注释的要求:
- 能够准确反映设计思想和代码逻辑;
- 能够描述业务含义,使别的程序员能够迅速了解到代码背后的信息。完全没有注释的大段代码对于阅读者形同天书,注释是给自己看的,即使隔很长时间,也能清晰理解当时的思路;注释也是给继任者看的,使其能够快速接替自己的工作
11.【参考】
好的命名、代码结构是自解释的,注释力求精简准确、表达到位。避免出现注释的一个极端:过多过滥的注释,代码的逻辑一旦修改,修改注释是相当大的负担。
反例:
java
// put elephant into fridge
put(elephant, fridge);
方法名 put,加上两个有意义的变量名 elephant 和 fridge,已经说明了这是在干什么,语义清晰的代码不需要额外的注释
12.【参考】
特殊注释标记,请注明标记人与标记时间。注意及时处理这些标记,通过标记扫描,经常清理此类标记。线上故障有时候就是来源于这些标记处的代码。
1) 待办事宜(TODO
):(标记人,标记时间,[预计处理时间]) 表示需要实现,但目前还未实现的功能。这实际上是一个 Javadoc 的标签,目前的 Javadoc 还没 有实现,但已经被广泛使用。只能应用于类,接口和方法(因为它是一个 Javadoc 标签)。
2) 错误,不能工作(FIXME
):(标记人,标记时间,[预计处理时间]) 在注释中用 FIXME
标记某代码是错误的,而且不能工作,需要及时纠正的情况。
其它注意事项
【强制】
在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。 说明:不要在方法体内定义:
java
Pattern pattern = Pattern.compile("规则");
【强制】
避免用Apache Beanutils
进行属性的copy
。
说明:Apache BeanUtils
性能较差,可以使用其他方案比如 Spring BeanUtils, Cglib BeanCopier
,注意均是浅拷贝
-
【强制】velocity
调用POJO
类的属性时,直接使用属性名取值即可,模板引擎会自动按规范调用POJO
的getXxx()
,如果是boolean
基本数据类型变量(boolean
命名不需要加is
前缀),会自动调用isXxx()
方法。 说明:注意如果是Boolean
包装类对象,优先调用getXxx()
的方法 -
【强制】
后台输送给页面的变量必须加 <math xmlns="http://www.w3.org/1998/Math/MathML"> ! v a r ------中间的感叹号。说明:如果 ' v a r ' 等于 ' n u l l ' 或者不存在,那么 ' !{var}------中间的感叹号。 说明:如果 `var` 等于` null `或者不存在,那么` </math>!var------中间的感叹号。说明:如果'var'等于'null'或者不存在,那么'{var}`会直接显示在页面上。 -
【强制】
注意Math.random()
这个方法返回是double
类型,注意取值的范围0≤x<1
(能够取到零值,注意除零异常),如果想获取整数类型的随机数,不要将x
放大10
的若干倍然后取整,直接使用Random
对象的nextInt
或者nextLong
方法 -
【推荐】
不要在视图模板中加入任何复杂的逻辑。 说明:根据MVC
理论,视图的职责是展示,不要抢模型和控制器的活。 -
【推荐】
任何数据结构的构造或初始化,都应指定大小,避免数据结构无限增长吃光内存。 -
【推荐】
及时清理不再使用的代码段或配置信息。 说明:对于垃圾代码或过时配置,坚决清理干净,避免程序过度臃肿,代码冗余。 正例:对于暂时被注释掉,后续可能恢复使用的代码片断,在注释代码上方,统一规定使用三个斜杠(///
)来说明注释掉代码的理由。
如:
java
public static void hello() {
/// 业务方通知活动暂停
// Business business = new Business();
// business.active();
System.out.println("it's finished");
}
结束语
下节给大家讲异常日志错误码定义
规范~
本着把自己知道的都告诉大家,如果本文对有所帮助,点赞+关注
鼓励一下呗~
阿里巴巴Java开发手册相关文章
- 一起来学阿里巴巴Java开发手册(一)
- 一起来学阿里巴巴Java开发手册(二)
- 一起来学阿里巴巴Java开发手册(三)
- 一起来学阿里巴巴Java开发手册(四)
- 一起来学阿里巴巴Java开发手册(五)
- 一起来学阿里巴巴Java开发手册(六)
MybatisPlus教程相关文章
往期Nginx教程相关文章
往期Docker教程相关文章
往前Shell脚本编程相关文章
- 一起来学Shell脚本编程(一)
- 一起来学Shell脚本编程(二)
- 一起来学Shell脚本编程(三)
- 一起来学Shell脚本编程(四)
- 一起来学Shell脚本编程(五)
- 一起来学Shell脚本编程(六)
- 一起来学Shell脚本编程(七)
往期Linux相关文章
- 一起来学Linux命令(一)
- 一起来学Linux命令(二)
- 一起来学Linux命令(三)
- 一起来学Linux命令(四)
- 一起来学Linux命令(五)
- 一起来学Linux命令(六)
- 一起来学Linux命令(七)
- 一起来学Linux命令(八)
- 一起来学Linux命令(九)
- 一起来学Linux命令(十)
往期面试题相关文章
- 查漏补缺第一期(Redis相关)
- 查漏补缺第二期(synchronized & 锁升级)
- 查漏补缺第三期(分布式事务相关)
- 查漏补缺第四期(Mysql相关)
- 查漏补缺第五期(HashMap & ConcurrentHashMap)
- 查漏补缺第六期(京东一面)
- 查漏补缺第七期(美团到店一面)
- 查漏补缺第八期(阿里一面)
- 查漏补缺第九期(阿里二面)
- 查漏补缺第十期(网易实习一面)
- 查漏补缺第十一期(网易实习二面)
- 查漏补缺第十二期(网易实习三面)
- 查漏补缺第十三期(滴滴实习一面)
- 查漏补缺第十四期(滴滴实习二面)
- 查漏补缺第十五期(华为一面)
- 查漏补缺第十六期(华为二面)
- 查漏补缺第十七期(华为三面)
- 查漏补缺第十八期(你了解class文件吗)
项目源码(源码已更新 欢迎star⭐️)
往期设计模式相关文章
- 一起来学设计模式之认识设计模式
- 一起来学设计模式之单例模式
- 一起来学设计模式之工厂模式
- 一起来学设计模式之建造者模式
- 一起来学设计模式之原型模式
- 一起来学设计模式之适配器模式
- 一起来学设计模式之桥接模式
- 一起来学设计模式之组合模式
- 一起来学设计模式之装饰器模式
- 一起来学设计模式之外观模式
- 一起来学设计模式之享元模式
- 一起来学设计模式之代理模式
- 一起来学设计模式之责任链模式
- 一起来学设计模式之命令模式
- 一起来学设计模式之解释器模式
- 一起来学设计模式之迭代器模式
- 一起来学设计模式之中介者模式
- 一起来学设计模式之备忘录模式
- 一起来学设计模式之观察者模式
- 一起来学设计模式之状态模式
- 一起来学设计模式之策略模式
- 一起来学设计模式之模板方法模式
- 一起来学设计模式之访问者模式
- 一起来学设计模式之依赖注入模式
设计模式项目源码(源码已更新 欢迎star⭐️)
Kafka 专题学习
- 一起来学kafka之Kafka集群搭建
- 一起来学kafka之整合SpringBoot基本使用
- 一起来学kafka之整合SpringBoot深入使用(一)
- 一起来学kafka之整合SpringBoot深入使用(二)
- 一起来学kafka之整合SpringBoot深入使用(三)
项目源码(源码已更新 欢迎star⭐️)
ElasticSearch 专题学习
项目源码(源码已更新 欢迎star⭐️)
往期并发编程内容推荐
- Java多线程专题之线程与进程概述
- Java多线程专题之线程类和接口入门
- Java多线程专题之进阶学习Thread(含源码分析)
- Java多线程专题之Callable、Future与FutureTask(含源码分析)
- 面试官: 有了解过线程组和线程优先级吗
- 面试官: 说一下线程的生命周期过程
- 面试官: 说一下线程间的通信
- 面试官: 说一下Java的共享内存模型
- 面试官: 有了解过指令重排吗,什么是happens-before
- 面试官: 有了解过volatile关键字吗 说说看
- 面试官: 有了解过Synchronized吗 说说看
- Java多线程专题之Lock锁的使用
- 面试官: 有了解过ReentrantLock的底层实现吗?说说看
- 面试官: 有了解过CAS和原子操作吗?说说看
- Java多线程专题之线程池的基本使用
- 面试官: 有了解过线程池的工作原理吗?说说看
- 面试官: 线程池是如何做到线程复用的?有了解过吗,说说看
- 面试官: 阻塞队列有了解过吗?说说看
- 面试官: 阻塞队列的底层实现有了解过吗? 说说看
- 面试官: 同步容器和并发容器有用过吗? 说说看
- 面试官: CopyOnWrite容器有了解过吗? 说说看
- 面试官: Semaphore在项目中有使用过吗?说说看(源码剖析)
- 面试官: Exchanger在项目中有使用过吗?说说看(源码剖析)
- 面试官: CountDownLatch有了解过吗?说说看(源码剖析)
- 面试官: CyclicBarrier有了解过吗?说说看(源码剖析)
- 面试官: Phaser有了解过吗?说说看
- 面试官: Fork/Join 有了解过吗?说说看(含源码分析)
- 面试官: Stream并行流有了解过吗?说说看