核心内容摘要
HY-Motion 1.0动作数据的Mathtype数学表达
HoRain 云小助手个人主页⛺️生活的理想就是为了理想的生活!⛳️ 推荐前些天发现了一个超棒的服务器购买网站性价比超高大内存超划算忍不住分享一下给大家。
点击跳转到网站。
目录⛳️ 推荐Java流程控制从条件判断到循环遍历
条件判断语句
1 if-else语句代码世界的红绿灯系统
2 switch语句多路分支的智能开关
3 三元运算符简洁的条件赋值
循环结构
1 传统for循环灵活的索引控制
2 for-each循环增强for循环简洁安全的遍历
3 循环选择指南
常见陷阱与最佳实践
1 条件判断陷阱
2 循环遍历陷阱
3 优化建议
四、
总结Java流程控制从条件判断到循环遍历Java流程控制是程序逻辑的核心它决定了代码的执行顺序和分支走向。
本文将系统梳理Java中的条件判断与循环结构结合最佳实践与常见陷阱助你写出清晰高效的代码。
条件判断语句
1 if-else语句代码世界的红绿灯系统// 基本结构 int age 20; if (age
{ System.out.println(欢迎进入成年人频道); } else { System.out.println(小朋友快去写作业); } // 多级嵌套else if int score 85; if (score
{ System.out.println(优秀); } else if (score
{ System.out.println(良好); } else if (score
{ System.out.println(及格); } else { System.out.println(不及格); }最佳实践避免嵌套过深多层if-else会让代码像迷宫建议使用卫语句提前返回即使只有一行代码也建议加上大括号{}使用布尔表达式简化逻辑isDeleted比多个if嵌套更清晰
2 switch语句多路分支的智能开关// 传统switch语句 String day Monday; switch (day) { case Monday: System.out.println(晨会需求评审); break; case Friday: System.out.println(划水等周末); break; default: System.out.println(认真写代码); } // Java 14 switch表达式更简洁 String task switch (day) { case Monday - 开会; case Friday - 摸鱼; default - 写BUG; };
注意事项别忘写break否则代码会串门fall-through优先用枚举类型替代字符串避免魔法值多个case可以共享同一段代码如季节判断示例
3 三元运算符简洁的条件赋值// 适用场景单表达式返回值的简单分支 int age 20; String status (age
? 成年 : 未成年; // ❌ 错误示例不能执行语句 // String msg score 60 ? Pass : System.out.println(Fail);使用原则仅适用于简单条件赋值true和false分支必须能转为同一类型避免复杂逻辑硬塞进三元表达式
循环结构
1 传统for循环灵活的索引控制// 基本结构 for (int i 0; i list.size(); i) { String item list.get(i); // 业务逻辑 } // 适用场景 // - 需要索引位置 // - 需要修改元素值 // - 需要控制步长如i2 // - 需要反向遍历技术本质通过索引访问集合元素依赖于集合的随机访问能力。
对于ArrayList等基于数组的集合时间复杂度为O(
。
2 for-each循环增强for循环简洁安全的遍历// 遍历一维数组 int[] numbers {1, 2, 3, 4, 5}; for (int num : numbers) { System.out.println(num); } // 遍历二维数组 int[][] matrix { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; for (int[] row : matrix) { for (int element : row) { System.out.print(element ); } System.out.println(); }技术本质Java 5引入的语法糖编译后会被转换成迭代器的hasNext()和next()方法调用对于集合或传统for循环对于数组。
优缺点对比特性传统for循环for-each循环获取索引✅ 支持❌ 不支持修改元素✅ 支持❌ 基本类型不支持代码简洁性⚠️ 较繁琐✅ 简洁安全性⚠️ 可能索引越界✅ 自动边界检查遍历方向✅ 灵活❌ 仅正向性能✅ ArrayList较快⚠️ LinkedList较快
3 循环选择指南何时使用传统for循环需要索引位置进行计算需要修改集合/数组中的元素需要控制遍历步长或方向遍历过程中需要删除元素注意仍需使用Iterator何时使用for-each循环简单的只读遍历代码可读性优先的场景遍历LinkedList等非随机访问集合性能更好
常见陷阱与最佳实践
1 条件判断陷阱// ❌ 错误用比较字符串内容 if (str1 str
{ ... } // 比较的是引用地址 // ✅ 正确使用equals方法 if (str
equals(str
) { ... } // ❌ 错误在if条件中调用有副作用的方法 if (list.remove(
! null) { ... } // 可能导致不可预测行为 // ✅ 正确先获取值再判断 Object item list.remove(
; if (item ! null) { ... }
2 循环遍历陷阱// ❌ 错误在for-each循环中修改集合 for (String item : list) { if (item.equals(remove)) { list.remove(item); // ConcurrentModificationException } } // ✅ 正确使用Iterator IteratorString it list.iterator(); while (it.hasNext()) { if (it.next().equals(remove)) { it.remove(); // 安全删除 } }
3 优化建议避免在循环中重复编译如正则表达式// ❌ 错误 for (String text : texts) { Pattern p Pattern.compile(\\d); // ... } // ✅ 正确 Pattern p Pattern.compile(\\d); for (String text : texts) { // ... }使用卫语句减少嵌套// ❌ 深层嵌套 if (user ! null) { if (user.isActive()) { if (user.hasPermission()) { // 业务逻辑 } } } // ✅ 卫语句 if (user null) return; if (!user.isActive()) return; if (!user.hasPermission()) return; // 业务逻辑考虑使用Optional替代null检查// 传统方式 if (user ! null user.getAddress() ! null) { String city user.getAddress().getCity(); } // Optional方式 String city Optional.ofNullable(user) .map(User::getAddress) .map(Address::getCity) .orElse(Unknown);
四、