摘要本文详细讲解了if、if-else、if-else if-else、嵌套if、switch语句包括 JDK 21 新语法以及三元运算符的用法与适用场景。通过一个完整的“成绩等级判断器”实战案例帮助初学者理解如何让程序根据不同条件执行不同分支并提供了结构选择建议与常见陷阱提示为后续学习循环打下坚实基础。关键词Java 条件判断, if-else 语句, switch 语句, 三元运算符, JDK 21前面几篇文章我们学习了数据变量、常量和运算运算符。但程序如果只会从上到下、一条接一条地执行语句那它就像一条笔直的马路——只能往前走遇到岔路也不会拐弯。但现实中的程序每天都在“做决策”如果用户输入了正确的密码就登录成功如果余额不足就提示充值如果今天是周末就显示“休息日”……这些“如果……就……”的逻辑就是今天我们要讲的条件判断。Java 提供了三种主要的条件判断结构if/else语句最常用适用于各种条件分支。switch语句适合对一个变量的多个离散值进行匹配。三元运算符? :一种简洁的“二选一”表达式。我们来逐一认识它们。1.if语句 —— 最基本的“如果…就…”if语句的语法非常直观if(条件){// 条件为 true 时执行的代码}条件必须是一个布尔表达式结果是true或false。如果条件为true就执行花括号里的代码否则跳过。intage20;if(age18){System.out.println(你已经成年了。);}// 程序继续向下执行如果只有一个语句花括号可以省略但不建议容易出错if(age18)System.out.println(成年了);// 不推荐2.if-else—— “如果…就…否则…”更常见的场景是二选一条件成立做 A否则做 B。if(条件){// 条件为 true 时执行}else{// 条件为 false 时执行}intscore65;if(score60){System.out.println(及格了);}else{System.out.println(不及格继续加油。);}3.if-else if-else—— 多重分支如果不止两个分支可以用else if串联起来if(条件1){// 条件1为 true}elseif(条件2){// 条件1为 false条件2为 true}elseif(条件3){// 条件1、2均为 false条件3为 true}else{// 所有条件均为 false}注意else if可以有多个else是可选的且最多一个放在最后表示“其他所有情况”。intscore85;if(score90){System.out.println(优秀);}elseif(score80){System.out.println(良好);}elseif(score70){System.out.println(中等);}elseif(score60){System.out.println(及格);}else{System.out.println(不及格);}这里有个重要的细节条件的顺序很关键。如果先把 60放在前面那么 90也会匹配 60就不会再往后判断了。所以通常把最严格的条件写在最前面。4. 嵌套if—— 条件中的条件在if或else的代码块内部还可以再写if语句这就是嵌套。嵌套可以让逻辑更精细但嵌套层数不宜过多一般不超过 3 层否则代码会变得难以阅读。可以考虑用逻辑运算符、||来简化。intage22;booleanhasIDtrue;if(age18){if(hasID){System.out.println(欢迎进入网吧。);}else{System.out.println(请出示身份证。);}}else{System.out.println(未成年人禁止入内。);}上面的代码可以改写成更简洁的形式if(age18hasID){System.out.println(欢迎进入网吧。);}elseif(age18!hasID){System.out.println(请出示身份证。);}else{System.out.println(未成年人禁止入内。);}哪种写法更好取决于具体场景。嵌套适合表达“层层递进”的检查而逻辑组合适合简单的并列条件。5.switch语句 —— 多路匹配的“开关”switch适用于一个变量等于多个固定值之一的情况。它比一连串的if-else if更清晰、更高效。传统switch的语法JDK 14 之前switch(变量){case值1:// 变量 值1 时执行break;case值2:// 变量 值2 时执行break;// ... 可以有多个 casedefault:// 所有 case 都不匹配时执行break;}break很关键如果某个 case 匹配后没有break程序会继续执行下一个 case 的代码这叫“穿透”直到遇到break或switch结束。这个特性有时故意使用但更多时候是 bug 的来源所以不要忘记写break。intdayOfWeek3;// 假设1周一7周日StringdayName;switch(dayOfWeek){case1:dayName星期一;break;case2:dayName星期二;break;case3:dayName星期三;break;case4:dayName星期四;break;case5:dayName星期五;break;case6:dayName星期六;break;case7:dayName星期日;break;default:dayName无效的星期;break;}System.out.println(dayName);// 星期三JDK 21 的switch增强很重要从 Java 14 开始switch得到了重大增强可以当作表达式使用并且支持-语法不再需要break。JDK 21 又进一步引入了模式匹配预览特性让switch变得更加强大。我们先看最实用的switch表达式intdayOfWeek3;StringdayNameswitch(dayOfWeek){case1-星期一;case2-星期二;case3-星期三;case4-星期四;case5-星期五;case6-星期六;case7-星期日;default-无效的星期;};System.out.println(dayName);看到区别了吗用-代替了:和break每个分支直接返回一个值。switch整体变成了一个表达式可以把结果赋值给变量。更简洁且不会发生“穿透”。如果需要在一个分支中执行多条语句可以使用花括号并用yield返回值关键字yield是专门为switch表达式引入的intscore85;Stringgradeswitch(score/10){case9,10-优秀;// 多个值可以并列case8-{System.out.println(良好级别);yield良好;// yield 返回这个分支的值}case7-中等;case6-及格;default-不及格;};System.out.println(grade);在 JDK 21 中switch还支持模式匹配预览特性可以匹配类型、null等但这是进阶内容我们会在第五阶段深入讲解。初学阶段掌握-和表达式用法就足够了。建议从现在开始尽量使用新式的switch语法-和表达式它更安全、更简洁。6. 三元运算符 —— “二选一”的快捷方式有时候我们只需要根据一个条件从两个值中选一个赋值给变量。这种简单的“if-else”可以用三元运算符? :来简化。语法变量条件?值1:值2;如果条件为true取值1否则取值2。intage20;Stringstatus(age18)?成年:未成年;System.out.println(status);// 成年它等价于Stringstatus;if(age18){status成年;}else{status未成年;}三元运算符很简洁但不要过度嵌套否则可读性会急剧下降。比如a ? b : c ? d : e这种写法就很不推荐。7. 实战一个简单的“成绩等级判断器”让我们把今天学到的内容综合起来写一个交互式小工具从用户输入分数然后输出等级。packagecom.example.demo;importjava.util.Scanner;/** * 演示条件判断if-else if 和 switch 表达式 * 功能根据用户输入的分数输出对应的等级 */publicclassGradeEvaluator{publicstaticvoidmain(String[]args){ScannerscannernewScanner(System.in);System.out.print(请输入你的分数0-100);intscorescanner.nextInt();// 1. 使用 if-else if 进行范围判断Stringgrade1;if(score0||score100){grade1无效分数;}elseif(score90){grade1优秀;}elseif(score80){grade1良好;}elseif(score70){grade1中等;}elseif(score60){grade1及格;}else{grade1不及格;}System.out.println(if-else 方式grade1);// 2. 使用 switch 表达式利用整数除法将分数区间映射到 0~10// 注意这里我们只处理 0~100 的正常分数异常情况用三元单独处理Stringgrade2(score0||score100)?无效分数:switch(score/10){case9,10-优秀;case8-良好;case7-中等;case6-及格;default-不及格;};System.out.println(switch 表达式方式grade2);// 3. 额外用 switch 判断等级对应的简短评语Stringcommentswitch(grade1){case优秀-太棒了继续保持;case良好-不错再接再厉;case中等-还可以多花点时间。;case及格-刚过线要加把劲;case不及格-别灰心找找原因重新出发;default-输入有误;};System.out.println(评语comment);scanner.close();}}运行它输入不同的分数观察输出。你会发现if-else和switch各有所长范围判断用if-else离散值匹配用switch。8. 选择哪种结构场景推荐方式条件是一个范围如分数 60if-else if条件是一个布尔表达式组合if-else 逻辑运算符条件变量是整数、字符、字符串或枚举且只有有限个固定值switch新语法更佳简单的二选一赋值三元运算符但别滥用9. 常见陷阱漏掉break旧语法导致“穿透”除非你故意利用否则都是 bug。switch表达式必须覆盖所有可能值要么有default要么所有 case 都覆盖。否则编译错误。条件顺序错误把更宽松的条件写在前面导致更严格的条件永远不会执行。浮点数比较不要用直接判断浮点数应该用范围或阈值。今天的总结今天我们学习了程序的“决策”能力if-else if-else最灵活适合范围、组合条件。switch适合离散值匹配推荐使用 JDK 21 的-表达式语法。三元运算符? :简洁的“二选一”。你已经可以让程序根据不同情况做出不同反应了。下一篇我们要讲循环——让程序重复做某件事直到满足条件为止。这是编程中另一个核心的控制结构。动手试试写一段代码从用户输入一个年份判断它是不是闰年条件能被 4 整除但不能被 100 整除或者能被 400 整除。用if-else实现。用switch表达式改写上面的星期判断要求使用-语法并处理无效输入。写一个简单的“计算器”程序提示用户输入两个数字和一个运算符、-、*、/然后输出运算结果。用switch来匹配运算符处理除数为 0 的情况。慢慢来多练习。掌握条件判断后你的程序就不再是一条直线了——它有了“灵魂”。我们下一篇见。 获取本系列示例代码请访问 GitCode。