阿里巴巴java规范检测值得注意的项总结

1.long或者Long初始赋值时,必须使用大写的L,不能是小写的l,小写容易跟数字1混淆,造成误解

2.在if/else for while/do语句中必须使用大括号,即使只有一行代码

3.在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。

这里写图片描述

4.所有的覆写方法,必须加@Override注解

这里写图片描述

5.获取当前毫秒数:

这里写图片描述

6.避免通过一个类的对象引用访问此类的静态变量或静态方法,无畏增加编译器解析成本,直接用类名来访问即可。

这里写图片描述
这里写图片描述

这里写图片描述

7.线程池不允许使用Executors去创建,二是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险

这里写图片描述

这里写图片描述

8.这里写图片描述

9.这里写图片描述

10.这里写图片描述

11.这里写图片描述

12.这里写图片描述

13.这里写图片描述

14.这里写图片描述

15.
SimpleDateFormat 是线程不安全的类,一般不要定义为static变量,如果定义为static,必须加锁,或者使用DateUtils工具类。 说明:如果是JDK8的应用,可以使用instant代替Date,LocalDateTime代替Calendar,DateTimeFormatter代替SimpleDateFormat,官方给出的解释:simple beautiful strong immutable thread-safe。

Positive example 1:
private static final String FORMAT = “yyyy-MM-dd HH:mm:ss”;
public String getFormat(Date date){
SimpleDateFormat dateFormat = new SimpleDateFormat(FORMAT);
return sdf.format(date);
}

Positive example 2:
private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
public void getFormat(){
synchronized (sdf){
sdf.format(new Date());
….;
}

Positive example 3:
private static final ThreadLocal DATE_FORMATTER = new ThreadLocal() {
@Override
protected DateFormat initialValue() {
return new SimpleDateFormat(“yyyy-MM-dd”);
}
};

16.不能使用过时的类或方法。 说明:java.net.URLDecoder 中的方法decode(String encodeStr) 这个方法已经过时,应该使用双参数decode(String source, String encode)。接口提供方既然明确是过时接口,那么有义务同时提供新的接口;作为调用方来说,有义务去考证过时方法的新实现是什么。

17.创建线程或线程池时请指定有意义的线程名称,方便出错时回溯。创建线程池的时候请使用带ThreadFactory的构造函数,并且提供自定义ThreadFactory实现或者使用第三方实现。

ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("demo-pool-%d").build();
ExecutorService singleThreadPool = new ThreadPoolExecutor(1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());

singleThreadPool.execute(()-> System.out.println(Thread.currentThread().getName()));
singleThreadPool.shutdown();



public class TimerTaskThread extends Thread {
    public TimerTaskThread(){
    super.setName("TimerTaskThread"); …
}

18.在一个switch块内,每个case要么通过break/return等来终止,要么注释说明程序将继续执行到哪一个case为止;在一个switch块内,都必须包含一个default语句并且放在最后,即使它什么代码也没有。

switch( x ){
    case 1 :
    break ;
    case 2 :
    break ;
    default :
}

19.对于Service和DAO类,基于SOA的理念,暴露出来的服务一定是接口,内部的实现类用Impl的后缀与接口区别

public interface DemoService{
    void f();
}

public class DemoServiceImpl implements DemoService {
    @Override
    public void f(){
        System.out.println("hello world");
    }
}

20.常量命名应该全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长

public class ConstantNameDemo {

/**
* max stock count
*/
public static final Long MAX_STOCK_COUNT = 50000L;

21.所有的枚举类型字段必须要有注释,说明每个数据项的用途。
public enum TestEnum {
/**
* agree
*/
agree(“agree”),
/**
* reject
*/
reject(“reject”);

    private String action;

    TestEnum(String action) {
        this.action = action;
    }

    public String getAction() {
        return action;
    }
}

22.抽象类命名使用Abstract或Base开头

abstract class BaseControllerDemo{
}

abstract class AbstractActionDemo{
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zz白龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值