阿里巴巴Java 开发手册泰山版的阅读学习与自查
不满足于平时的crud,也想码出高效,码出质量,通过手册的阅读学习记录反省下自身代码习惯等方面的不良习惯
Java 开发手册泰山版下载地址:https://developer.aliyun.com/topic/java2020?utm_content=g_1000113424
- 各层命名规约
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方法使得代码更易读,并可以获得更好的性能
// 一直都是这样写的 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:
- 打开 Settings >> Plugins >> Browse repositories...
- 在搜索框输入alibaba即可看到Alibaba Java Code Guidelines插件,点击Install进行安装,然后重启IDE生效
eclipse:
- Eclipse --> Help --> Install New Software
- 插件安装地址:https://p3c.alibaba.com/plugin/eclipse/update
- 然后勾选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
上一篇: 【前端开发】XML开发手册
下一篇: 《阿里巴巴Java开发手册》——编程规约