阿里巴巴Java开发手册-规范你我

从紧张的工作中抽出来闲暇之余学习巩固下知识

丰富自己不断提升。

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

正例:"test".equals(object);

反例:object.equlas("test");

说明:推荐使用java.util.Objects#equals(JDK7引入的工具类)

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

正例:

 

Iterator<String> it = a.iterator();
while (it.hasNext()) {
    String temp = it.next();
    if(删除元素的条件) {
        it.remove();
    }
}


反例:

 

 

List<String> a = new ArrayList<String>();
a.add("1");
a.add("2");
for (String temp : a) {
    if ("1".equals(temp)) {
        a.remove(temp);
    }
}

说明:试着执行以上代码的结果。

 

3. 高度注意Map类集合K/V能不能存储null的情况:

 

集合类KeyValueSuper说明
HashTable不允许为null不允许为nullDictionary线程安全
ConcurrentHashMap不允许为null不允许为nullAbstractMap分段锁技术
TreeMap不允许为null允许为nullAbstractMap线程不安全
HashMap允许为null允许为nullAbstractMap线程不安全

反例:由于HashMap的干扰,很多人认为ConcurrentHashMap是可以置入null值,而事实上存储

null值时会抛出NPE异常。

4. 线程资源必须通过线程池提供,不允许在应用中自行显式创建线程

说明:使用线程的好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资源不足的问题。

如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或着“过度切换”的问题。

5. 线程池不允许用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更

加明确线程池的运行规则,规避资源耗尽的风险。

说明:

1)FixedThreadPool和SingleThreadPool:

     允许的请求队列长度为Integer.MAX_VALUE,可能会堆积大量的请求,从而导致OOM(内存溢出)。

2)CacheThreadPool和ScheduledThreadPool:

     允许的创建线程数量为Integer.MAX_VALUE,可能会创建大量的线程,从而导致OOM。

6. 表达异常分支时,少用if-else语句,这种方式可以改成:

if (condition) {
    ...
    return obj;
}
//接着写else的业务逻辑代码

说明:如果非要使用if()...else if()...else...方式表达逻辑,避免后续代码维护困难,请勿超过3层。

正例:逻辑上超过3层的if-else代码可以使用卫语句,或状态模式来实现。卫语句示例:

public void today() {
    if (isBusy) {
        System.out.println("change time.");
        return;
    }
    if (isFree()) {
        System.out.println("go to travel.");
        return;
   }
    System.out.println("stay at home to learn Alibaba Java Coding Guideline");
    return;
}

 7. 循环体中的语句要考量性能,以下操作尽量移至循环体外处理,如定义对象、变量、获取数据库连接,进行不必要的try-catch操作

(这个try-catch是否可以移至循环体外)。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值