java规范总结

1.所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较。

    说明:对于 Integer var = ? 在-128 至 127 范围内的赋值,Integer 对象是在 IntegerCache.cache 产生,
              会复用已有对象,这个区间内的 Integer 值可以直接使用==进行 判断,但是这个区间之外的所有数据,
              都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用 equals 方法进行判断。

2.Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。

       如:"test".equals(object);

3.使用索引访问用 String 的 split 方法得到的数组时,需做最后一个分隔符后有无内容的检查,否则会有抛 IndexOutOfBoundsException 的风险。

       如:
             String str = "a,b,c,,";
             String[] ary = str.split(",");
             //预期大于 3,结果是 3
             System.out.println(ary.length);

4.类内方法定义顺序依次是:公有方法或保护方法 > 私有方法 > getter/setter方法。

说明:公有方法是类的调用者和维护者最关心的方法,首屏展示最好;保护方保护方法虽然只是子类关心,
          也可能是“模板设计模式”下的核心方法;而私有方法外部一般不需要特别关心,是一个 黑盒实现;
          因为方法信息价值较低,所有 Service 和 DAO 的 getter/setter 方法放在类体最后。

5.不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator方式,如果并发操作,需要对 Iterator 对象加锁。

6.在 JDK7 版本及以上,Comparator 要满足如下三个条件,不然 Arrays.sort,Collections.sort 会报 IllegalArgumentException 异常。

说明:
      1) x,y 的比较结果和 y,x 的比较结果相反。
      2) x>y,y>z,则 x>z。
      3) x=y,则 x,z 比较结果和 y,z 比较结果相同。

7.利用 Set 元素唯一的特性,可以快速对一个集合进行去重操作,避免使用 List 的contains 方法进行遍历、对比、去重操作。

8.如果是 JDK8 的应用,可以使用 Instant 代替 Date,LocalDateTime 代替 Calendar,DateTimeFormatter代替Simpledateformatter,
   官方给出的解释:simple beautiful strong immutable thread-safe。

9.表达异常的分支时,少用 if-else 方式,这种方式可以改写成:
  if (condition) {
   ...
   return obj;
  }

10.除常用方法(如 getXxx/isXxx)等外,不要在条件判断中执行其它复杂的语句,将复杂逻辑判断的结果赋值给一个有意义的布尔变量名,以提高可读性。
  如:final boolean existed = (file.open(fileName, "w") != null) && (...) || (...){
      ...
    };
    if (existed) {
     ...
    }

11.后台输送给页面的变量必须加$!{var}——中间的感叹号。
  说明:如果 var=null 或者不存在,那么${var}会直接显示在页面上。

    

posted @ 2018-08-15 15:46  无情川客  阅读(280)  评论(0编辑  收藏  举报