一、阿里巴巴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 代码开发规范相关推荐

  1. eclipse java代码某一行需要修改注释_看看这些Java代码开发规范吧!你好,我好,大家好!...

    作为一名开发人员,当你接手他人的项目时,且当你阅读他人的代码时,是有没有遇到脑袋充血,感觉Java要把你"送走"的感觉呢?我们在用Java开发技术进行开发前,一定要牢牢恪守Java ...

  2. java代码开发规范

    一  编码规范 1.1      命名规范 代码中的命名均不能以特殊字符(如下划线.$#符号)开始或结束. 反例: _name / #Object 2. 代码中的命名严禁使用拼音与英文混合的方式,更不 ...

  3. java代码开发规范_java代码开发规范

    一  编码规范 1.1      命名规范 代码中的命名均不能以特殊字符(如下划线.$#符号)开始或结束. 反例: _name / #Object 2. 代码中的命名严禁使用拼音与英文混合的方式,更不 ...

  4. java json插件安装_IDEAL葵花宝典:java代码开发规范插件:GsonFormat插件将JSONObject格式的String 解析成实体...

    前言: GsonFormat插件主要用于使用Gson库将JSONObject格式的String 解析成实体,该插件可以加快开发进度,使用非常方便,效率高. 这个教程主要是学习IntelliJ IDEA ...

  5. IDEAL葵花宝典:java代码开发规范插件 FindBugs-IDEA

     前言: 检测代码中可能的bug及不规范的位置,检测的模式相比p3c更多,写完代码后检测下 避免低级bug,强烈建议用一下,一不小心就发现很多老代码的bug. 使用步骤: 1):打开 Settings ...

  6. 【Java后台开发规范】--- 圈复杂度

    文章目录 前言 其他类型的规范 圈复杂度 提炼方法 if.else 卫语句 去else 策略模式 switch 循环嵌套 其他建议 前言 做Java开发的,大多数可能都有看过阿里的Java后台开发手册 ...

  7. java代码开发的通用规范

    文章目录 前言 一.命名风格 二.变量定义 三.代码格式 四.OOP 规则 五. 集合处理 六.控制语句 七.注释规约 八.异常处理 九.编码检查 十.编码安全 十一.其他约定 十二.SqlServe ...

  8. 长沙北大青鸟java 学费_长沙北大青鸟学校好不好 长沙北大青鸟实力学费一览表:Java代码编写规范(二)...

    原标题:长沙北大青鸟学校好不好 长沙北大青鸟实力学费一览表:Java代码编写规范(二) 文件名规范 1.一个Java源文件只能存储个Java类. 2.文件名与Java类名相同. 3.一个类文件的代码行 ...

  9. java 代码书写规范_代码书写规范和命名规范

    上一篇给大家分享了一下,关于文档编写的几个概念.这篇文章阐述如果编写代码书写规范以及命名规范文档.[以java语言为例] 1.代码书写规范 代码书写规范,能够让不同的人,写出相同风格的代码.很多人都看 ...

最新文章

  1. 分布式技术追踪 2017年第十二期
  2. Python 之 Numpy (六)分割
  3. Eclipse 中maven插件坏死解决办法
  4. Ubuntu 18.04 更改静态IP
  5. mysql autocommit 脚本_mysql autocommit的差异
  6. 产品经理版知乎竟成招聘利器,某公司当天收到200+简历
  7. 产品说,我只需要一个有亿点复杂的查询界面
  8. 随机产生单词java_关于java:如何创建随机单词选择器方法
  9. mybatis学习笔记-02-第一个mybatis程序
  10. 崩坏3人物模型详解—是次世代还是手绘?
  11. steghide隐写术
  12. jetpack的camerax_Android开发-Jetpack组件CameraX
  13. IDEA 常用快捷键 常用插件 2
  14. MySQL数据库安装超级详细教程
  15. delphi商业源码
  16. centos7设置静态IP地址方法
  17. 如何缩小png图片大小kb?如何让png图片变小?
  18. 请问,“什么知识才是值得学习的?”
  19. Structure-Revealing联合去噪增强模型论文解读
  20. 加速器,陀螺仪测量移动距离的方法

热门文章

  1. 软件项目开发计划【列文】2022.5.11
  2. 【GDSOI2017】魔兽争霸 x
  3. 【今日CV 计算机视觉论文速览 第149期】Tue, 30 Jul 2019
  4. ansible角色部署lamp架构
  5. 一键获取linux内存、cpu、磁盘IO等信息脚本编写,及其原理详解
  6. 看漫画MHGmhgui,Python爬虫之神奇的eval,附赠一个压缩模块
  7. 华为路由器如何通过BootROM TFTP方式升级系统文件
  8. 华为路由器、交换机、AC忘记密码,但是想保留配置怎么处理
  9. React Native 之项目的启动
  10. 【Linux】screen常用命令