Java代码建议

  • 在序列化类中不使用构造函数为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");
      复制代码
相关文章
相关标签/搜索