欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

阿里巴巴Java 开发手册泰山版的阅读学习与自查

程序员文章站 2024-03-24 15:30:34
...

不满足于平时的crud,也想码出高效,码出质量,通过手册的阅读学习记录反省下自身代码习惯等方面的不良习惯

Java 开发手册泰山版下载地址https://developer.aliyun.com/topic/java2020?utm_content=g_1000113424

阿里巴巴Java 开发手册泰山版的阅读学习与自查

  • 各层命名规约
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 开发手册泰山版的阅读学习与自查

// 一直都是这样写的
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://p3c.alibaba.com/plugin/eclipse/update
  3. 然后勾选Ali-CodeAnalysis,再一直点Next -->  Next --> Finish 按提示走下去就好。 然后就是提示重启了,安装完毕。

参考文章:

Java工程师该如何编写高效代码?作者总结了"Java高效代码50例"

https://developer.aliyun.com/article/739852?spm=a2c6h.13878518.J_2306691810.10.1d1a2077emcygP

Java开发手册建议创建HashMap时设置初始化容量,但是多少合适呢

https://developer.aliyun.com/article/756448?spm=a2c6h.13878518.J_2306691810.6.42f72077UpVPZx

为什么阿里巴巴禁止工程师直接使用日志系统(Log4j、Logback)中的 API

https://developer.aliyun.com/article/756446?spm=a2c6h.13878518.J_2306691810.5.42f72077UpVPZx

阿里java开发手册

https://developer.aliyun.com/topic/java2020?utm_content=g_1000113424