如何写出简洁明了的 Java 代码?
🏆本文收录于「滚雪球学SpringBoot」专栏,专业攻坚指数级提升持续更新中,up!up!up!!欢迎点赞&&收藏&&订阅。
@TOC
🚀 前言
简洁明了的代码不仅能提升代码的可读性,还能减少后期维护成本。在实际开发中,如何编写清晰、易懂的 Java 代码,是每个开发者都需要深入思考和实践的能力。下面,我们从代码结构、命名规范、最佳实践、常用工具类等多个维度,分享写出简洁明了 Java 代码的技巧。
✨ 1. 遵循良好的代码风格
1.1 规范命名
- 类名:使用大写字母开头,采用大驼峰命名法。
public class UserManagerService { }
- 变量名和方法名:使用小写字母开头,采用小驼峰命名法。
String userName; public void getUserById() { }
- 常量名:使用全大写,单词之间用下划线分隔。
public static final int MAX_RETRIES = 3;
1.2 避免冗长和模糊的命名
命名时要尽量做到简洁且语义明确,不要过于冗长,也不要用单个字母变量(除循环变量外)。
- ❌ 不推荐:
int a; // 不明确 String stringVariableForThePurposeOfStoringName; // 冗长
- ✅ 推荐:
int userAge; String userName;
1.3 格式化代码
使用 IDE(如 IntelliJ IDEA、Eclipse)的自动格式化功能 (Ctrl+Alt+L
in IntelliJ)。
推荐格式:
- 使用 4 个空格作为缩进。
- 控制每行代码长度(建议不超过 80-100 字符)。
- 大括号
{}
始终成对,并在语句块中清晰呈现。if (condition) { // Your logic here } else { // Your logic here }
✨ 2. 避免代码重复,提取公共逻辑
2.1 封装公共逻辑
将重复的逻辑提取到工具类或公共方法中:
- ❌ 不推荐:
System.out.println("Welcome " + userName); System.out.println("Welcome " + adminName);
- ✅ 推荐:
public void printWelcomeMessage(String name) { System.out.println("Welcome " + name); } printWelcomeMessage(userName); printWelcomeMessage(adminName);
2.2 利用抽象和接口
将通用逻辑封装在父类或接口中。
public abstract class Shape {
public abstract double calculateArea();
}
public class Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
public double calculateArea() {
return Math.PI * radius * radius;
}
}
public class Rectangle extends Shape {
private double width, height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
@Override
public double calculateArea() {
return width * height;
}
}
✨ 3. 善用工具类与新特性
3.1 使用标准库
- 避免重复造轮子:使用 Java 提供的工具类(如
Collections
,Stream
)。List<Integer> numbers = Arrays.asList(1, 2, 3, 4); int max = Collections.max(numbers); // 直接获取最大值
3.2 使用 Java 8+ 的 Stream 和 Lambda 表达式
使用 Stream
和 Lambda
简化集合操作:
- ❌ 不推荐:
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); List<String> filteredNames = new ArrayList<>(); for (String name : names) { if (name.startsWith("A")) { filteredNames.add(name); } }
- ✅ 推荐:
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); List<String> filteredNames = names.stream() .filter(name -> name.startsWith("A")) .collect(Collectors.toList());
3.3 使用 Optional 处理空值
避免空指针异常:
- ❌ 不推荐:
if (user == null) { return "No user found"; } else { return user.getName(); }
- ✅ 推荐:
Optional<User> user = findUserById(id); return user.map(User::getName).orElse("No user found");
✨ 4. 简化控制流
4.1 减少嵌套
尽量减少 if/else 的嵌套层级:
- ❌ 不推荐:
if (condition1) { if (condition2) { // Logic } }
- ✅ 推荐:
if (!condition1) { return; } if (!condition2) { return; } // Logic
4.2 使用三元运算符
- ❌ 不推荐:
String result; if (age > 18) { result = "Adult"; } else { result = "Minor"; }
- ✅ 推荐:
String result = age > 18 ? "Adult" : "Minor";
✨ 5. 写好注释,清晰表达意图
5.1 注释要简洁明了
- 注释应表达 “为什么”,而不是 “怎么做”。
- 推荐格式:
// 检查用户是否为管理员 if (user.isAdmin()) { // 执行管理员逻辑 }
5.2 避免无意义的注释
- ❌ 不推荐:
// 定义变量 age int age = 25;
✨ 6. 遵循单一职责原则(SRP)
每个类只负责完成一种任务,避免单个类承担过多职责。
- ❌ 不推荐:
public class UserManager { public void createUser() { /* 创建用户逻辑 */ } public void logActivity() { /* 日志记录逻辑 */ } }
- ✅ 推荐:
public class UserManager { public void createUser() { /* 创建用户逻辑 */ } } public class ActivityLogger { public void logActivity() { /* 日志记录逻辑 */ } }
✨ 7. 避免硬编码
将常量抽取到配置文件或枚举中。
- ❌ 不推荐:
if ("ADMIN".equals(user.getRole())) { ... }
- ✅ 推荐:
public class UserRole { public static final String ADMIN = "ADMIN"; public static final String USER = "USER"; } if (UserRole.ADMIN.equals(user.getRole())) { ... }
✨ 8. 使用 Lombok 简化样板代码
Lombok 是一个非常流行的 Java 库,可以通过注解减少大量样板代码,如 getter/setter
、构造器等。
示例代码:
- ❌ 不推荐:
public class User { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
- ✅ 推荐:
@Data public class User { private String name; private int age; }
使用 Lombok 的
@Data
注解自动生成getter
、setter
、toString
等方法。
✨ 9. 编写单元测试
写单元测试不仅可以提升代码的健壮性,还能帮助你发现潜在问题。使用 JUnit 和 Mockito 是主流选择。
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class UserServiceTest {
@Test
public void testGetUserName() {
UserService userService = new UserService();
String result = userService.getUserName(1);
assertEquals("Alice", result);
}
}
✨ 10. 定期重构与代码评审
- 定期检查代码是否符合最佳实践,减少重复代码。
- 使用代码审查工具(如 SonarQube)发现代码中的潜在问题。
🌟 总结
编写简洁明了的 Java 代码,需要从以下几个方面入手:
- 良好的代码规范:合理的命名、格式化和注释。
- 代码复用和抽象:避免重复,提取公共逻辑。
- 工具与特性:充分利用 Java 的现代特性(如 Stream、Optional)以及第三方库(如 Lombok)。
- 持续优化:通过单元测试和代码评审,不断提升代码质量。
优秀代码的核心在于清晰的表达意图,既让计算机执行得高效,也让开发者容易理解。🎉
🧧福利赠与你🧧
无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学SpringBoot」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门SpringBoot,就像滚雪球一样,越滚越大, 无边无际,指数级提升。
最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。
同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。
✨️ Who am I?
我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;更多精彩福利点击这里;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。
-End-
- 点赞
- 收藏
- 关注作者
评论(0)