Java 代码开发规范
一、阿里巴巴Java开发手册下载
链接: https://pan.baidu.com/s/1VVsz1UIyOIJDXlzrBy6faQ?pwd=4skg 提取码: 4skg 复制这段内容后打开百度网盘手机App,操作更方便
二、阅读须知
POJO plain ordinary java object 普通java对象
-------DO Data object 数据对象,一个DO 通常来说 对应一张表,或者是Mapper查询接口中的返回类型 Mapper和dao返回的都是DO
-------DTO Data Transfer Object,数据传输对象,service组件需要将dao组件返回的DO对象给封装成DTO对象,再返回给controller组件,或者是别的service组件。service必须将数据封装为DTO,返回给其他的controller或者是service来使用
-------VO view object,其实就是将页面中需要展示的数据封装在VO里面,然后在以前是将VO给传输给页面模板,比如JSP(JSTL标签语法,可以将VO中的数据给展示出来),freemarker,velocity,thymeleaf。restful接口,在接口中可以将一个接口要返回的数据,封装在VO里面,从接口返回即可。
-------PO 就是将DO不是作为data object,而是作为domain object,然后将PO作为persistence object,一个PO对应一张表,DO就是我们平时放在domain包中的领域模型对象
-------AO application object,就是跟展示层相关的一些数据
RPC Remote Procedure Call 远程过程调用
NPE NullPointerException 空指针异常
三、大致内容
日期格式化时,传入 pattern 中表示年份统一使用小写的 y。
yyyy表示年。YYYY表示一年中的第几周
类成员与方法访问控制从严:
1)如果不允许外部直接通过 new 来创建对象,那么构造方法必须是 private。
2)工具类不允许有 public 或 default 构造方法。
3)类非 static 成员变量并且与子类共享,必须是 protected。
4)类非 static 成员变量并且仅在本类使用,必须是 private。
5)类 static 成员变量如果仅在本类使用,必须是 private。
6)若是 static 成员变量,考虑是否为 final。
7)类成员方法只供类内部调用,必须是 private。
8)类成员方法只对继承类公开,那么限制为 protected。
如果是一个 private 的方法,想删除就删除,可是一个 public 的 service 成员方法或成员变量,删除一下,不得手心冒点汗吗? 变量像自己的小孩,尽量在自己的视线内,变量作用域太大,无限制的到处跑,那么你会担心的。
BigDecimal 的等值比较应使用 compareTo() 方法,而不是 equals() 方法。
equalis会比较值和精度(1.0和1.00返回结果为false),而compareTo会忽略精度
定义数据对象 DO 类时,属性类型要与数据库字段类型相匹配。
数据库字段的 bigint 必须与类属性的 Long 类型相对应。
禁止使用构造方法 BigDecimal(double) 的方式把 double 值转化为 BigDecimal 对象。
BigDecimal(double) 存在精度损失风险,在精确计算或值比较的场景中可能会导致业务逻辑异常。如涉及到货币的计算逻辑,当计算体量变多时,可能就会出现少了1分钱的误差,将会使客户产生今天少一分钱,明天就会少1块钱,后面可能会少100块...
如:
BigDecimal g = new BigDecimal(0.1F);
实际的存储值为:0.100000001490116119384765625
正例:优先推荐入参为 String 的构造方法,或使用 BigDecimal 的 valueOf 方法,此方法内部其实执行了 Double 的 toString,而 Double 的 toString 按 double 的实际能表达的精度对尾数进行了截断。
BigDecimal recommend1 = new BigDecimal("0.1");BigDecimal recommend2 = BigDecimal.valueOf(0.1);
构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请放在 init 方法中。
禁止在 POJO 类中,同时存在对应属性 xxx 的 isXxx() 和 getXxx() 方法。
当一个类有多个构造方法,或者多个同名方法,这些方法应该按顺序放置在一起,便于阅读, 此条规则优先于下一条。
若需要在循环中多次拼接字符串,最好使用StringBuilder的append方法,能够加快编译速度
反编译出的字节码文件显示每次循环都会 new 出一个 StringBuilder 对象,然后进行 append 操作,最后通过 toString() 返回 String 对象,造成内存资源浪费。
final 可以声明类、成员变量、方法、以及本地变量,下列情况使用 final 关键字:
1)不允许被继承的类,如:String 类。
2)不允许修改引用的域对象,如:POJO 类的域变量。
3)不允许被覆写的方法,如:POJO 类的 setter 方法。
4)不允许运行过程中重新赋值的局部变量。
5)避免上下文重复使用一个变量,使用 final 关键字可以强制重新定义一个变量,方便更好地进行重构。
慎用 Object 的 clone 方法来拷贝对象。
说明:对象 clone 方法默认是浅拷贝,若想实现深拷贝需覆写 clone 方法实现域对象的深度遍历式拷贝。
获取当前毫秒数:System.currentTimeMillis();而不是 new Date().getTime()。
说明:获取纳秒级时间,则使用 System.nanoTime 的方式。在 JDK8 中,针对统计时间等场景,推荐使用 Instant 类。
禁止在程序中写死一年为 365 天,避免在公历闰年时出现日期转换错误或程序逻辑错误。
正例:
// 获取今年的天数
int daysOfThisYear = LocalDate.now().lengthOfYear();
// 获取指定某年的天数
LocalDate.of(2011, 1, 1).lengthOfYear();
不要在 foreach 循环里进行元素的 remove / add 操作。
remove 元素请使用 iterator 方式, 如果并发操作,需要对 iterator 对象加锁。
正例:
List list = new ArrayList<>();list.add("1");list.add("2"); Iterator iterator = list.iterator(); while (iterator.hasNext()) { String item = iterator.next(); if (删除元素的条件) { iterator.remove(); } }
集合类 | Key | Value | Super | 说明 |
Hashtable | 不允许为 null | 不允许为 null | Dictionary | 线程安全 |
TreeMap | 不允许为 null | 允许为 null | AbstractMap | 线程不安全 |
ConcurrentHashMap | 不允许为 null | 不允许为 null | AbstractMap | 锁分段技术(JDK8:CAS) |
HashMap | 允许为 null | 允许为 null | AbstractMap | 线程不安全 |
Java 代码开发规范相关推荐
- eclipse java代码某一行需要修改注释_看看这些Java代码开发规范吧!你好,我好,大家好!...
作为一名开发人员,当你接手他人的项目时,且当你阅读他人的代码时,是有没有遇到脑袋充血,感觉Java要把你"送走"的感觉呢?我们在用Java开发技术进行开发前,一定要牢牢恪守Java ...
- java代码开发规范
一 编码规范 1.1 命名规范 代码中的命名均不能以特殊字符(如下划线.$#符号)开始或结束. 反例: _name / #Object 2. 代码中的命名严禁使用拼音与英文混合的方式,更不 ...
- java代码开发规范_java代码开发规范
一 编码规范 1.1 命名规范 代码中的命名均不能以特殊字符(如下划线.$#符号)开始或结束. 反例: _name / #Object 2. 代码中的命名严禁使用拼音与英文混合的方式,更不 ...
- java json插件安装_IDEAL葵花宝典:java代码开发规范插件:GsonFormat插件将JSONObject格式的String 解析成实体...
前言: GsonFormat插件主要用于使用Gson库将JSONObject格式的String 解析成实体,该插件可以加快开发进度,使用非常方便,效率高. 这个教程主要是学习IntelliJ IDEA ...
- IDEAL葵花宝典:java代码开发规范插件 FindBugs-IDEA
前言: 检测代码中可能的bug及不规范的位置,检测的模式相比p3c更多,写完代码后检测下 避免低级bug,强烈建议用一下,一不小心就发现很多老代码的bug. 使用步骤: 1):打开 Settings ...
- 【Java后台开发规范】--- 圈复杂度
文章目录 前言 其他类型的规范 圈复杂度 提炼方法 if.else 卫语句 去else 策略模式 switch 循环嵌套 其他建议 前言 做Java开发的,大多数可能都有看过阿里的Java后台开发手册 ...
- java代码开发的通用规范
文章目录 前言 一.命名风格 二.变量定义 三.代码格式 四.OOP 规则 五. 集合处理 六.控制语句 七.注释规约 八.异常处理 九.编码检查 十.编码安全 十一.其他约定 十二.SqlServe ...
- 长沙北大青鸟java 学费_长沙北大青鸟学校好不好 长沙北大青鸟实力学费一览表:Java代码编写规范(二)...
原标题:长沙北大青鸟学校好不好 长沙北大青鸟实力学费一览表:Java代码编写规范(二) 文件名规范 1.一个Java源文件只能存储个Java类. 2.文件名与Java类名相同. 3.一个类文件的代码行 ...
- java 代码书写规范_代码书写规范和命名规范
上一篇给大家分享了一下,关于文档编写的几个概念.这篇文章阐述如果编写代码书写规范以及命名规范文档.[以java语言为例] 1.代码书写规范 代码书写规范,能够让不同的人,写出相同风格的代码.很多人都看 ...
最新文章
- 分布式技术追踪 2017年第十二期
- Python 之 Numpy (六)分割
- Eclipse 中maven插件坏死解决办法
- Ubuntu 18.04 更改静态IP
- mysql autocommit 脚本_mysql autocommit的差异
- 产品经理版知乎竟成招聘利器,某公司当天收到200+简历
- 产品说,我只需要一个有亿点复杂的查询界面
- 随机产生单词java_关于java:如何创建随机单词选择器方法
- mybatis学习笔记-02-第一个mybatis程序
- 崩坏3人物模型详解—是次世代还是手绘?
- steghide隐写术
- jetpack的camerax_Android开发-Jetpack组件CameraX
- IDEA 常用快捷键 常用插件 2
- MySQL数据库安装超级详细教程
- delphi商业源码
- centos7设置静态IP地址方法
- 如何缩小png图片大小kb?如何让png图片变小?
- 请问,“什么知识才是值得学习的?”
- Structure-Revealing联合去噪增强模型论文解读
- 加速器,陀螺仪测量移动距离的方法