Java 初学者代码审查清单
8 对我来说更像 C++ 而不是 Java。我遗漏了什么吗?
清单总是很有用!它们可以快速检查,确保高效、有效地执行任务的一致性和完整性。
在这里,我整理了一份基本的 20 点代码检查清单,供 Java 初学者参考。这将帮助他们确保代码质量和一致性。
不用多说...让我们开始吧...
1. 空值检查
我们知道NullPointerException是 Java 中最常见的异常,并且可能导致大问题。
因此,作为一般做法,在任何操作之前始终对变量进行空检查。
2.异常处理
应使用 try-catch 块进行异常处理,并在 catch 块中进行适当的记录。
另外,请确保在finally块中正确关闭资源。
3. 代码缩进和格式化
为了获得更清晰、更易读的代码,请彻底使用代码缩进(使用Tab或Spaces等)。
它可以通过 IDE 的内置编辑器自动完成。例如,在 Eclipse 中使用Ctrl-Shift-F 。同样,在 IntelliJ 中使用 Ctrl-Alt-L 。
利用 Java 格式规则!
4. 优化导入
始终优化 Java 类中的导入。
5.静态代码审查工具
使用静态代码审查工具(如 Sonar、PMD 和 FindBugs)来审查代码。
6. 常量
-
为多个地方需要的静态值创建一个常量文件
-
使用数据库驱动的值来获取动态值
-
使用 ENUM 来表示一组常量
7.命名约定
-
始终检查变量/方法/类的名称是否真正涵盖主题
-
软件包名称应全部小写,以反向的互联网域名开头,后跟应用程序名称。例如,org/companyname/appname
-
类名应以大写字母开头。例如,Animal、Employee和User
-
变量/方法名应采用驼峰命名法。例如animalInstanceList、calculateAmount和displaySummary()
-
尽量避免在类/方法/变量名称中使用缩写。建议使用domainCode而不是dmnCd
8. 并非所有单行代码
保持代码简洁易读很重要。所以,最好不要总是使用单行代码。尤其是当我们在一行代码中初始化和操作变量时。
例如,写:
out.write(attrs.get("offset") + "-" + Math.min(attrs.get("count"), attrs.get("offset") + attrs.get("max")) + " " + title + " " + attrs.get("count"));
作为:
int start = attrs.get("offset")
int total = attrs.get("count"))
int end = Math.min(total, start + attrs.get("max"))
out.write(start + "-" + end + " " + title + " " + total)
9. 空白
使用空格分隔组合语句,使代码更具可读性。
例如,写:
Integer.valueOf(params.offset?params.offset:attrs.offset)
作为:
Integer.valueOf(params.offset ? params.offset : attrs.offset)
10. 括号前后的空格
一般来说,我们不在括号中使用空格。
例如,写:
if ( params )
if ( total > 0 )
if ( end < begin )
作为:
if (params)
if (total > 0)
if (end < begin)
11. 花括号
对于单行代码也使用花括号。
例如,写:
if ( end < begin )
end = begin
作为:
if (end < begin) {
end = begin
}
12. 评论
始终添加注释(如果有)来定义目的。
例如,某个类的 Javadoc:
/**
* General convenience tags for layout - header, body and footer
* @author – Name
* @dateCreated - Date
*/
class LayoutTagLib {
}
方法的 Javadoc:
/**
* Gets the user for specified code and role.
* @param code :- The code, either username or email address
* @param role :- The role identification e.g. A, B or C. Default is A.
* @return the user or null if not found
*/
User findUser(String code, String role = "A")
确保代码是不言自明的,并且注释在非常特殊的情况下确实有用。
13.清理
-
删除控制台打印语句(SOP),改用日志记录(从不记录个人信息)
-
删除过时的评论
-
如果方法/变量不打算将来使用或将被删除,请在方法/变量上使用@deprecated注释
-
删除硬编码的变量值
14.业务逻辑
通过使用可重复使用的组件(如实用程序和服务方法)来避免冗余代码。
15.使用StringBuilder或StringBuffer代替String
当对String执行大量操作时,使用StringBuilder或StringBuffer
例如,Java 每次进行字符串连接操作时都会创建一个新的String对象。在这种情况下,更好的方法是使用StringBuffer。
16. switch-case 语句覆盖多个if-else 语句
使用switch-case代替多个if-else条件是一种很好的做法。
它优化了代码执行,也使代码更清晰、更易读。
17. 循环创建对象
通常最好在循环内创建对象(如果循环外不需要对象)。Java 会优化短生命周期对象的内存使用。
例如,写:
Person person;
for (int i=0; i<namesList.size(); i++) {
person = new Person();
person.setName(namesList.get(i));
person.display();
}
作为:
for (int i=0; i<namesList.size(); i++) {
Person person = new Person();
person.setName(namesList.get(i));
person.display();
}
此外,仅在需要时创建新对象。
例如,写:
ArrayList<Person> personList = new ArrayList<Person>();
for (int i=0; i<namesList.size(); i++) {
Person person = new Person();
if (null != namesList.get(i)) {
person.setName(namesList.get(i));
personList.add(person);
}
}
作为:
ArrayList<Person> personList = new ArrayList<Person>();
for (int i=0; i<namesList.size(); i++) {
if (null != namesList.get(i)) {
Person person = new Person();
person.setName(namesList.get(i));
personList.add(person);
}
}
18. 代码提交
-
将文件分组并一起提交(不要在单独的提交中提交文件)
-
不要提交包含实际密码的代码。确保使用系统/配置变量来替换密码
-
提交消息应包含任务信息。例如,JIRA 问题编号、关于代码实现的有意义的评论
-
仅在需要时提交.class文件(来自build、out、target目录)
19. 使用equals而不是==
equals执行两个字符串的实际比较,而 == 比较对象引用。
20.保持简单!
保持代码的简单性和可读性。
请告诉我你的想法。
感谢阅读。