• 各层命名规约

Service/DAO 层方法命名规约

  • 获取单个对象的方法用 get 做前缀。
  • 获取多个对象的方法用 list 做前缀,复数结尾,如:listObjects。
  • 获取统计值的方法用 count 做前缀。
  • 插入的方法用 save/insert 做前缀。
  • 删除的方法用 remove/delete 做前缀。
  • 修改的方法用 update 做前缀。

领域模型命名规约

  • 数据对象:xxxDO,xxx 即为数据表名。
  • 数据传输对象:xxxDTO,xxx 为业务领域相关的名称。
  • 展示对象:xxxVO,xxx 一般为网页名称。
  • POJO 是 DO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO
  • 如果变量的初值会被覆盖,就没有必要给变量赋初值
// List<UserDO> userList = new ArrayList<>();
List<UserDO> userList;
if (isAll) {
    userList = userDAO.queryAll();
} else {
    userList = userDAO.queryActive();
}
• 采用Lambda表达式替换内部匿名类
// 以前经常这样用来排序
List<User> userList = ...;
Collections.sort(userList, new Comparator<User>() {
    @Override
    public int compare(User user1, User user2) {
        Long userId1 = user1.getId();
        Long userId2 = user2.getId();
        ...
        return userId1.compareTo(userId2);
    }
});
// Lambda表达式效率更高
List<User> userList = ...;
Collections.sort(userList, (user1, user2) -> {
    Long userId1 = user1.getId();
    Long userId2 = user2.getId();
    ...
    return userId1.compareTo(userId2);
});
• 尽量使用基本数据类型作为方法参数类型与返回值类型,避免不必要的装箱、拆箱和空指针判断
• 尽量指定方法的final修饰符
方法指定final修饰符,可以让方法不可以被重写,Java编译器会寻找机会内联所有的final方法。
内联对于提升Java运行效率作用重大,具体可参见Java运行期优化,能够使性能平均提高50%。

注意:所有的private方法会隐式地被指定final修饰符,所以无须再为其指定final修饰符
• 尽量避免不必要的方法调用(这个也经常犯)
// 反例:
List<UserDO> userList = userDAO.queryActive();
if (isAll) {
    userList = userDAO.queryAll();
}
// 正例:
List<UserDO> userList;
if (isAll) {
    userList = userDAO.queryAll();
} else {
    userList = userDAO.queryActive();
}
• 尽量使用Arrays.asList转化数组为列表
List<String> list = Arrays.asList("Short", "Integer", "Long");


  • 不要使用size方法检测空,必须使用isEmpty方法检测空,isEmpty方法使得代码更易读,并可以获得更好的性能

java开发手册 嵩山 泰山 黄山 java 开发手册(泰山版)_User

// 一直都是这样写的
List<AccountDetail> list = new ArrayList<>();
if (list == null || list.size() <= 0) {
    return ...;
}
// 下次这样写
List<AccountDetail> list = new ArrayList<>();
if (list == null || list.isEmpty) {
    return ...;
}
• .尽量避免在循环中捕获异常
• 初始化时尽量指定缓冲区大小
StringBuffer buffer = new StringBuffer(1024);
StringBuilder builder = new StringBuilder(1024);
// 使用HashMap(int initialCapacity)来初始化容量,JDK会默认帮我们计算一个相对合理的值当做初始容量
// 相对合理并不一定能满足要求
Map<String, String> map = Maps.newHashMapWithExpectedSize(7);
• 尽量使用线程池减少线程开销
// 反例:
public void executeTask(Runnable runnable) {
    new Thread(runnable).start();
}

// 正例:
private static final ExecutorService EXECUTOR_SERVICE = Executors.newFixedThreadPool(10);
public void executeTask(Runnable runnable) {
    executorService.execute(runnable);
}
 
阿里巴巴Java开发规约IDE插件安装
idea:
1. 打开 Settings >> Plugins >> Browse repositories...
2. 在搜索框输入alibaba即可看到Alibaba Java Code Guidelines插件,点击Install进行安装,然后重启IDE生效
eclipse:
1. Eclipse --> Help --> Install New Software
2. 插件安装地址:https:///plugin/eclipse/update
3. 然后勾选Ali-CodeAnalysis,再一直点Next -->  Next --> Finish 按提示走下去就好。 然后就是提示重启了,安装完毕。