简介:本文系统梳理Java流程控制语句体系,重点剖析选择结构的if、if-else、if-else if-else与switch语句的语法、适用场景及最佳实践,并结合代码示例讲解嵌套、穿透、表达式类型等易错点,帮助开发者写出分支清晰、可维护性高的Java代码。
任何一段可执行的程序,本质上都在做三件事:顺序执行、条件判断、循环重复。流程控制语句就是用来描述这三件事的语法工具。没有流程控制,代码只能从上到下线性执行,无法应对真实世界中千变万化的输入与状态。
在Java中,流程控制语句通常被划分为三大类:
本文聚焦于选择结构,同时也会把它放回整个流程控制体系中对比讲解,帮助读者建立完整的知识地图。
选择结构(也称为分支结构)用于根据不同的条件执行不同的代码块。Java提供了以下几种主要形式:
if 语句if-else 语句if-else if-else 语句switch 语句这些语句允许程序根据条件的真假来决定执行哪一部分代码。选择结构是业务逻辑分支化的基础,例如权限校验、状态机流转、参数校验、菜单路由等场景都离不开它。
if (条件表达式) {// 条件为 true 时执行的代码块}
boolean 类型。这一点与C/C++不同,Java不允许用整数代替布尔值。if 语句可以单独存在,不强制要求搭配 else。
int score = 85;if (score >= 60) {System.out.println("成绩合格");}
if (条件表达式) {// 条件为 true 时执行} else {// 条件为 false 时执行}
else 分支不能单独存在,必须与最近的未匹配 if 配对。
int age = 17;if (age >= 18) {System.out.println("已成年");} else {System.out.println("未成年");}
if (条件1) {// 条件1为 true} else if (条件2) {// 条件1为 false 且条件2为 true} else if (条件3) {// 前面条件都为 false 且条件3为 true} else {// 所有条件都为 false}
if-else if-else 按从上到下的顺序依次判断,一旦某个条件为 true,就执行对应代码块,并跳出整个选择结构,后续条件不再判断。
else 并非必需,但从防御性编程角度,建议保留用于处理“兜底”情况。switch 或策略模式,提升可读性。
int score = 78;if (score >= 90) {System.out.println("优秀");} else if (score >= 80) {System.out.println("良好");} else if (score >= 60) {System.out.println("及格");} else {System.out.println("不及格");}
switch (表达式) {case 常量1:// 代码块break;case 常量2:// 代码块break;default:// 默认代码块}
不同Java版本支持的类型有所差异,常见包括:
byte、short、char、intenum)String(从Java 7开始支持)Byte、Short、Character、Integer(通过自动拆箱)不支持 long、float、double、boolean 作为 switch 表达式类型。
如果某个 case 分支没有写 break,程序会继续执行下一个 case 的代码,这就是“穿透”。穿透有时是刻意为之,例如多个条件共用同一段逻辑:
switch (day) {case 1:case 2:case 3:case 4:case 5:System.out.println("工作日");break;case 6:case 7:System.out.println("休息日");break;default:System.out.println("非法输入");}
但在大多数情况下,遗漏 break 是Bug的常见来源,需要格外注意。
较新的Java版本引入了 switch 表达式,支持箭头语法和返回值,写法更简洁、更安全:
String type = switch (day) {case 1, 2, 3, 4, 5 -> "工作日";case 6, 7 -> "休息日";default -> "非法输入";};
这种写法天然避免穿透问题,并且可以直接作为表达式赋值,适合现代Java项目。
| 结构 | 适用场景 | 优点 | 注意事项 |
|---|---|---|---|
| if | 单一条件判断 | 简单直接 | 条件必须是 boolean |
| if-else | 二选一 | 逻辑清晰 | else 必须配对 |
| if-else if-else | 多条件范围判断 | 灵活 | 注意条件顺序 |
| switch | 等值多分支 | 结构整齐 | 注意 break 与类型限制 |
选型原则可以总结为:
if-else if-else。switch。else 总是与最近的 if 配对,必要时应使用花括号明确层次。== 比较浮点数,应结合误差范围判断。default 处理异常输入。return 或抽取方法简化。switch 判断字符串时,应确保表达式不为 null,否则会抛出空指针异常。选择结构是Java流程控制的核心组成部分。if、if-else、if-else if-else 和 switch 各有适用场景,理解它们的语法细节、执行逻辑与常见陷阱,是编写高质量Java代码的基础。在实际开发中,应根据业务条件的性质(范围还是等值)、分支数量、可扩展性要求,合理选择最合适的结构,并结合现代Java语法特性持续优化代码的可读性与健壮性。