在序列化类中不使用构造函数为final变量赋值java
手动替换class文件不可取(静态变量修改后需编译后才会修改)数组
用偶数判断不用奇数判断缓存
重要的数字入参须要判断边界ide
BigDecimal 使用String构造参数为最优选择函数
包装类型使用euqals方法比较是不是相等 或者用转化为基本类型比较(大小会根据相关的方法比较)工具
包装类都是采用valueOf()方法转换的 其中-128-127都是从缓存从取的不会再堆上产生新的对象。性能
(java9 废除包装类相关基本类型的构造器,改用静态方法ValueOf替代)优化
通常状况最好不要重写父类静态方法(固然若是你能区分代表类型和实际类型,你能够试试)。Idea IDE中你须要手动重写this
@Override 注解也没法做用在静态方法上的。spa
不使用实例访问静态方法,这是代码的坏味道。仍是用类名访问吧。
构造函数尽可能简单。这里的简单的意思是不要在其中作复杂的初始化代码。(调用其余方法或者其余类的构造器、为final变量赋值等)
在面向对象语言中,除非很是了解类的执行过程,不然仍是尝试简洁明了的方式构建代码结构。
静态代码块会再构造函数内首先执行(若是构造函数中有this和super这两个关键字,
静态代码块是不会插入到这个构造函数前执行的,确保每一个构造函数只执行一次静态代码块)。做用通常为实例化变量和实例化环境。
内部类实现多继承
避免浅拷贝
工具类最好使用final来避免继承 构造器私有化
尽量的使用局部变量
中文排序Collator类
基本类型优先使用
集合初始化的时候很是有必要声明容量
最值计算时使用集合最简单,使用数组性能最优
Arrays 只使用只读列表操做
不一样的集合采用不一样的遍历方法。随机访问 无序存储的使用fori 有序的使用foreach 或者迭代器
列表相等(equals) 只关心数据元素
subList方法生成子列表时,原始列表保持只读状态
利用好集合replaceAll 等方法能优雅实现集合的去重(注意集合的浅拷贝)
switch case 判断值是否为空
枚举使用的valueOf时候前 校验时候存在该种枚举的值
枚举最好使用工厂方式
反射效率低是个真命题,但所以而不使用它就是个假命题
final块中不要出现return 语句
构造函数里不要抛出异常
异常只为异常服务,不能用来做为正常的主逻辑(除非真的没法避免)
try catch 虽然性能比较慢 可是不能作为拒绝异常的理由
线程的优先级推荐使用MIN_PRIORITY(1) NORM_PRIORITY(5) MAX_PRIORITY(10) 级别 不建议使用其余的7个数字
Optional能够避免空指针异常和减小if else逻辑 不可直接调用ifParent()
// 1.传统if-else
if (person != null) {
if (person.getCar() != null) {
if (person.getCar().getInsurance() != null) {
insurance = person.getCar().getInsurance().getName();
}
}
}
// 2.optional 优化写法
String unknown =
Optional.ofNullable(person)
.map(Person::getCar)
.map(Car::getInsurance)
.map(Insurance::getName)
.orElse("Unknown");
复制代码