Java 流程控制语句详解从条件判断到循环控制学会流程控制就等于学会了让程序思考和重复的能力。本文结合实际场景带你逐个击破 Java 流程控制的核心语法。一、if 条件语句if 语句是流程控制的基础让程序根据条件选择不同的执行路径。1.1 基本形式// 单分支if(条件){// 条件为真时执行}// 双分支if(条件){// 条件为真时执行}else{// 条件为假时执行}// 多分支if(条件1){// 条件1为真}elseif(条件2){// 条件2为真}else{// 以上都不满足}1.2 实际场景用户登录验证publicclassLoginDemo{publicstaticvoidmain(String[]args){Stringusernameadmin;Stringpassword123456;if(username.isEmpty()||password.isEmpty()){System.out.println(用户名或密码不能为空);}elseif(!username.equals(admin)){System.out.println(用户名不存在);}elseif(!password.equals(123456)){System.out.println(密码错误);}else{System.out.println(登录成功欢迎回来);}}}1.3 注意事项条件表达式必须是布尔值不像 C/C 可以用整数代替。即使只有一行代码也建议加上大括号{}避免维护时出错。二、switch 语句switch 适合对一个变量进行多值匹配比一长串 else-if 更清晰。2.1 基本语法switch(变量){case值1:// 匹配值1时执行break;case值2:// 匹配值2时执行break;default:// 以上都不匹配时执行break;}2.2 实际场景电商订单状态机publicclassOrderStatusDemo{publicstaticvoidmain(String[]args){intstatus3;// 订单状态码switch(status){case0:System.out.println(待支付 - 请尽快完成付款);break;case1:System.out.println(已支付 - 商家正在备货);break;case2:System.out.println(已发货 - 快递正在路上);break;case3:System.out.println(已送达 - 请确认收货);break;case4:System.out.println(已完成 - 感谢您的购买);break;default:System.out.println(未知状态请联系客服);break;}}}2.3 实际场景根据星期几安排工作Java 14 增强 switch// Java 14 引入的 switch 表达式更简洁Stringday周三;Stringtaskswitch(day){case周一-制定本周计划;case周二,周三,周四-专注开发;case周五-代码评审 周报;case周六-技术充电;case周日-休息;default-无效日期;};System.out.println(task);// 输出专注开发2.4 注意事项支持的数据类型byte、short、int、char、StringJava 7、枚举。不要忘记 break否则会发生穿透fall-through即继续执行下一个 case 的代码。Java 14 的箭头语法-天然避免穿透问题。三、for 循环for 循环是已知循环次数时的首选。3.1 经典 for 循环for(初始化;条件;更新){// 循环体}实际场景计算1到100的累计和publicclassSumDemo{publicstaticvoidmain(String[]args){intsum0;for(inti1;i100;i){sumi;}System.out.println(1到100的和 sum);// 5050}}3.2 增强 for 循环for-each遍历集合或数组时更简洁不需要手动管理索引。for(元素类型 变量:数组或集合){// 循环体}实际场景统计学生成绩publicclassScoreDemo{publicstaticvoidmain(String[]args){int[]scores{92,85,78,96,63,88};inttotal0;intexcellent0;for(intscore:scores){totalscore;if(score90){excellent;}}doubleaverage(double)total/scores.length;System.out.printf(平均分%.1f优秀人数%d\n,average,excellent);// 输出平均分83.7优秀人数2}}3.3 注意事项经典 for 适合需要索引的场景for-each 适合只读遍历。for-each 中不能修改数组/集合的引用也不能获取当前索引。四、嵌套循环嵌套循环就是循环里面套循环常用于处理二维结构表格、矩阵、图形。4.1 实际场景打印九九乘法表publicclassMultiplicationTable{publicstaticvoidmain(String[]args){for(inti1;i9;i){for(intj1;ji;j){System.out.printf(%d×%d%-4d,j,i,i*j);}System.out.println();// 换行}}}输出1×11 1×22 2×24 1×33 2×36 3×39 ...以此类推 1×99 2×918 3×927 ... 9×9814.2 实际场景遍历二维数组课程表publicclassCourseTable{publicstaticvoidmain(String[]args){String[][]schedule{{语文,数学,英语,体育,美术},{数学,英语,语文,音乐,体育},{英语,语文,数学,美术,音乐}};String[]days{周一,周二,周三};for(inti0;ischedule.length;i){System.out.print(days[i]);for(intj0;jschedule[i].length;j){System.out.print(schedule[i][j]\t);}System.out.println();}}}4.3 注意事项嵌套层数建议不超过 3 层否则可读性急剧下降。内层循环的执行次数 外层次数 × 内层次数注意性能。五、break 和 continue这两个关键字用于在循环中进行流程干预。5.1 break立即跳出循环break 会终止当前所在的循环程序跳到循环之后继续执行。实际场景在数组中查找目标元素publicclassSearchDemo{publicstaticvoidmain(String[]args){int[]data{12,45,7,89,33,67};inttarget89;intindex-1;for(inti0;idata.length;i){if(data[i]target){indexi;break;// 找到了就不再继续搜索}}if(index!-1){System.out.println(target 在第 index 个位置);}else{System.out.println(未找到 target);}}}带标签的 break跳出多层循环publicclassLabelBreakDemo{publicstaticvoidmain(String[]args){int[][]matrix{{1,2,3},{4,5,6},{7,8,9}};inttarget5;outer:// 标签for(inti0;imatrix.length;i){for(intj0;jmatrix[i].length;j){if(matrix[i][j]target){System.out.printf(找到 %d位置[%d][%d]\n,target,i,j);breakouter;// 直接跳出外层循环}}}}}5.2 continue跳过本次继续下一次continue 不会终止循环只是跳过当前这一轮剩下的代码直接进入下一轮迭代。实际场景筛选有效数据跳过空值publicclassFilterDemo{publicstaticvoidmain(String[]args){String[]inputs{hello,,world,null,java, ,code};for(Stringinput:inputs){// 跳过 null 和空白字符串if(inputnull||input.trim().isEmpty()){continue;}System.out.println(处理数据input);}}}输出处理数据hello 处理数据world 处理数据java 处理数据code5.3 break vs continue 对比特性breakcontinue作用终止整个循环跳过本轮继续下一轮循环是否继续否是配合标签可跳出多层循环可跳到外层循环的下一次典型场景找到目标即停止过滤不符合条件的数据六、综合实战学生成绩分析系统把以上所有知识点串起来实现一个完整的小程序publicclassGradeAnalyzer{publicstaticvoidmain(String[]args){String[]students{张三,李四,王五,赵六,钱七};int[][]scores{{85,92,78},// 张三语、数、英{72,65,80},// 李四{95,88,92},// 王五{55,48,62},// 赵六{88,76,85}// 钱七};String[]subjects{语文,数学,英语};System.out.println( 学生成绩分析报告 \n);// 嵌套循环 for-each逐个学生分析for(inti0;istudents.length;i){inttotal0;booleanhasFailfalse;for(intj0;jscores[i].length;j){totalscores[i][j];// if 判断是否有不及格科目if(scores[i][j]60){hasFailtrue;System.out.printf( ⚠ %s 的%s不及格%d分\n,students[i],subjects[j],scores[i][j]);}}doubleaverage(double)total/scores[i].length;// switch 判断等级Stringlevel;intlevelCode(int)average/10;switch(levelCode){case10:case9:level优秀;break;case8:level良好;break;case7:level中等;break;case6:level及格;break;default:level不及格;break;}// continue跳过有不及格科目的学生的评优资格if(hasFail){System.out.printf(%s | 均分%.1f | 等级%s | ❌ 不参与评优\n,students[i],average,level);continue;}System.out.printf(%s | 均分%.1f | 等级%s | ✅ 可参与评优\n,students[i],average,level);}}}运行结果 学生成绩分析报告 张三 | 均分85.0 | 等级良好 | ✅ 可参与评优 李四 | 均分72.3 | 等级中等 | ✅ 可参与评优 王五 | 均分91.7 | 等级优秀 | ✅ 可参与评优 ⚠ 赵六 的语文不及格55分 ⚠ 赵六 的数学不及格48分 赵六 | 均分55.0 | 等级不及格 | ❌ 不参与评优 钱七 | 均分83.0 | 等级良好 | ✅ 可参与评优七、总结速查表语句核心用途何时选用if / else if / else条件判断需要根据不同条件走不同逻辑switch多值匹配一个变量有多个固定取值比 else-if 更清晰for已知次数的循环循环次数确定需要索引控制for-each遍历集合/数组只需读取元素不关心索引嵌套循环处理多维结构二维数据、图形输出等break终止循环找到目标即停止或跳出多层循环continue跳过本轮过滤数据跳过不需要处理的情况学习建议流程控制是编程的地基多写小练习巩固手感。尝试用不同方式解决同一个问题比如用 if 和 switch 分别实现体会各自的优势。