-
String的替换、分割时,编译正则表达式,提升效率
-
异常代替错误码
-
变量的定义靠近第一次使用的地方,流程要流畅
-
NIO path paths files,使用paths进行文件路径处理。
-
Stream的内部循环,采用流式方式处理集合
-
新的日期框架
-
try with resource
-
代码可读性,依靠的是代码语义、意图;不知道POJO的意义,以及语义化的涵义;只是感觉Map,String好灵活好喜欢。
-
尽管方法都短小简洁,但是代码的可读性依然不强,分析后发现是由于代码分层不清晰导致的。编码时,喜欢将需要的方法都写到一个类中,导致类混杂了很多功能,掺杂了不同的语义。应该通过抽象与分层将不同语义的功能,抽离到不同的类中。
-
线程池使用完毕,要关闭。
-
对象参数要加final,不要在方法内对对象的引用复制,没用的。
-
不可变性为引用类型的值语义,提供了变通的语法支持
-
消除重复
-
写好注释
-
Lambda表达式本身就是一个接口的实现
-
参数的净化和检验
-
语法与语义要保持一致,代码与功能要保持一致
-
类和方法的设计优先考虑泛型
-
契约式设计,防御式编程有利于编写安全可靠的代码,入参的合法性检验,与处理前的净化
-
站在客户的角度,审视自己的接口设计。自己设计的类对他人的影响,他人是否按照你的预想使用你的类。每个类既是服务的提供者,也是服务的享受者。
-
将相关的数据项绑定到一个类中,便于统一管理,如复制,创建,传参数,比较。rest,ftp,email
-
代码的位置,代码应该在哪个类中;代码的顺序,变量应该定义在靠近使用的地方,语句的顺序调整
-
lamda和函数式接口的搭配使用
-
将多个方法的变量设置为成员变量,避免方法间传来传去。
-
必要时合并方法和表达式。
-
变量和类名的命名,命名要准确,多加限定词
常见的误区
- 浮点数的精度问题
float a = 1.0f - 0.9f;
System.out.println(a); // 0.100000024
float b = 0.9f - 0.8f;
System.out.println(b); // 0.099999964
Java 中 float 和 double 都是不精确的,这是由于其在计算机中的表示是决定的
- 注意下面两个构造函数的差异
BigDecimal(double val) , new BigDecimal(“0.1”)