第三章 上 Java流程控制:从顺序到循环的编程艺术
目录概述:1. 顺序语句2. 分支语句2.1 if语句2.2 if...else语句2.3 if...else if...else if...else语句2.4 switch...case default语句及其最佳实践3. 循环语句3.1 for循环3.2 while循环3.3 循环语句中的break语句和continue语句4. 总结与最佳实践4.1 三大流程控制语句核心要点总结顺序语句分支语句循环语句4.2 最佳实践建议选择合适的分支语句循环语句的选择策略代码质量与可维护性实际项目中的应用建议4.3 常见错误与调试技巧常见错误调试技巧概述:原则上计算机程序都是从上到下顺序被执行的。但是在程序执行过程中可能会因为某些条件的变化跳过某些语句的执行或者因为某种原因需要重复执行某些语句。为了控制计算机程序执行的过程或者走向需要使用程序设计语言中的流程控制语句。本章将详细介绍 Java 中的流程控制语句包括顺序语句、分支语句、循环语句、数组以及新版 JDK 中switch表达式和yield关键字的使用。1. 顺序语句顺序语句是指用一对大括号“{ }”括起来的从上到下逐条顺序被执行的一组语句。第2章介绍的所有例子程序都是顺序语句的例子。// 示例代码顺序语句演示 public static void main(String[] args) { String name 张三; int age 20; System.out.println(我的名字叫 name); System.out.println(我今年 age 岁); }实际应用示例用户注册流程通常就是顺序语句的典型应用从接收用户输入、验证数据、保存到数据库、发送确认邮件每一步都是按顺序执行的。2. 分支语句程序在顺序执行过程中需要检查某些变量的值并根据变量值的不同执行不同的程序语句。Java的分支流程控制语句包括if语句、if...else语句、if...else if...else if...else语句、switch...case default语句等。下面对分支流程语句进行逐个介绍。2.1 if语句if语句顾名思义就是程序在运行过程中根据不同条件执行不同的语句。// 示例代码if语句基本用法 import java.util.Scanner; public static void main(String[] args) { Scanner sc new Scanner(System.in); int student_in_class; System.out.print(请输入班级人数); student_in_class sc.nextInt(); if (student_in_class 50) { System.out.println(这个班的学生人数超过50人); } System.out.println(信息显示完毕); }更多示例// 检查用户权限 boolean isAdmin true; if (isAdmin) { System.out.println(欢迎管理员登录系统); showAdminPanel(); } // 验证用户输入 String input getUserInput(); if (input ! null !input.isEmpty()) { processInput(input); }if分支语句的一般格式如下2.2 if...else语句在if语句中有时需要根据if语句的条件表达式的true或者false执行不同的代码。// 示例代码if...else语句 import java.util.Scanner; public static void main(String[] args) { Scanner sc new Scanner(System.in); int student_in_class; System.out.print(请输入班级人数); student_in_class sc.nextInt(); if (student_in_class 30) { System.out.println(这个班的学生人数超过30人); } else { System.out.println(这个班的学生人数少于30人); } System.out.println(信息显示完毕); }实际应用示例// 用户登录验证 String username admin; String password 123456; if (isValidUser(username, password)) { System.out.println(登录成功); redirectToHomePage(); } else { System.out.println(用户名或密码错误); showLoginError(); } // 成绩等级判断 int score 85; if (score 90) { System.out.println(优秀); } else if (score 80) { System.out.println(良好); } else if (score 60) { System.out.println(及格); } else { System.out.println(不及格); }if...else语句的一般格式2.3 if...else if...else if...else语句if...else语句可以组合起来构成更为复杂的if...else if...else if...else语句用于处理多个条件分支。// 示例代码多条件判断 import java.util.Scanner; public static void main(String[] args) { Scanner sc new Scanner(System.in); int student_in_class; System.out.print(请输入班级人数); student_in_class sc.nextInt(); if (student_in_class 30) { System.out.println(这个班的学生人数超过30人); } else if (student_in_class 20) { System.out.println(这个班的学生人数少于30人但是多于20人); } else if (student_in_class 10) { System.out.println(这个班的学生人数少于20人但是多于10人); } else { System.out.println(这个班的学生人数少于10人); } System.out.println(信息显示完毕); }最佳实践将最可能成立的条件放在前面提高效率避免过多的嵌套超过3层建议使用switch或策略模式使用大括号{}明确代码块范围即使只有一行代码if...else if...else if...else语句的一般格式是2.4 switch...case default语句及其最佳实践switch语句也称为“多分支语句”。它用于检查某个变量的值如果这个变量的值与某个case语句后面的值相等则执行这个case后面的语句。如果这个值不等于任何case的值则执行default后面的语句。// 示例代码传统switch语句 import java.util.Scanner; public static void main(String[] args) { Scanner sc new Scanner(System.in); System.out.println(请输入一个单词); String str sc.nextLine(); switch (str) { case hello: System.out.println(你说 hello); System.out.println(我说你好); break; case world: System.out.println(你说 world); System.out.println(我说中国); break; default: System.out.println(I dont know!); break; } System.out.println(Over!); }Java 12 switch表达式示例// 示例代码新版switch表达式Java 12 import java.util.Scanner; public static void main(String[] args) { Scanner sc new Scanner(System.in); System.out.println(请输入一个单词); String str sc.nextLine(); // 使用箭头语法自动break switch (str) { case hello - { System.out.println(你说 hello); System.out.println(我说你好); } case world - { System.out.println(你说 world); System.out.println(我说中国); } default - System.out.println(I dont know!); } System.out.println(Over!); }更多实用示例// 月份天数判断 int month 2; int year 2024; int days switch (month) { case 1, 3, 5, 7, 8, 10, 12 - 31; case 4, 6, 9, 11 - 30; case 2 - { if ((year % 4 0 year % 100 ! 0) || (year % 400 0)) { yield 29; // 闰年 } else { yield 28; // 平年 } } default - throw new IllegalArgumentException(无效月份: month); }; System.out.println(month 月有 days 天); // 用户角色权限检查 String userRole ADMIN; String permission switch (userRole) { case ADMIN - 所有权限; case EDITOR - 编辑和查看权限; case VIEWER - 仅查看权限; default - 无权限; }; System.out.println(用户权限 permission);switch...case default语句的一般形式是注意事项switch语句有一个容易让程序员产生bug的地方如果在某个case子句中本来需要使用break语句跳出switch语句可能由于粗心忘记了break从而导致继续执行该case子句紧接着的case子句代码这称为case穿透。新版JDK对switch语句的使用方法语法做了简化使用“-”这种新的switch...case结构Java会在每个“-”所对应的代码末尾自动加上break语句从而解决程序员容易忘记break语句的问题。最佳实践总是包含default分支处理未预料的情况使用Java 12的箭头语法避免case穿透对于复杂的逻辑考虑使用多态或策略模式替代switch表达式可以返回值使代码更简洁3. 循环语句有时需要一段代码被重复执行例如为了进行从1到100的加法运算需要不断地执行加法运算。为此需要使用循环语句。Java常用的循环语句包括for循环和while循环。3.1 for循环先看一个例子。这个例子计算从1到100的平方和完成计算后将结果显示在屏幕上。代码如下// 计算1到100的平方和 public static void main(String[] args) { int total 0; for(int i 1; i 100; i) { total total i * i; // 累加平方 } System.out.println(从1到100的平方和是 total); }更多for循环示例// 遍历数组 int[] numbers {1, 2, 3, 4, 5}; for (int i 0; i numbers.length; i) { System.out.println(第 (i 1) 个元素 numbers[i]); } // 嵌套循环打印乘法表 for (int i 1; i 9; i) { for (int j 1; j i; j) { System.out.print(j × i (i * j) \t); } System.out.println(); } // 增强for循环for-each String[] fruits {苹果, 香蕉, 橙子, 葡萄}; for (String fruit : fruits) { System.out.println(水果 fruit); }for循环的一般形式是for循环的执行过程是第一步先执行“初始化语句”第二步判断“条件表达式”是否为true若是则执行大括号里面的循环体语句否则跳出for循环直接进入第四步第三步执行“迭代语句”并再次进入第二步第四步执行for循环大括号后面的语句。如果for循环的大括号里面只有一条语句则大括号是可以省略的。3.2 while循环使用while循环可以实现与for循环同样的效果。// 使用while循环计算1到100的平方和 public static void main(String[] args) { int total 0; int i 1; while(i 100) { total total i * i; i; } System.out.println(从1到100的平方和是 total); }更多while循环示例// 用户输入验证 import java.util.Scanner; Scanner scanner new Scanner(System.in); int number; System.out.print(请输入一个正数); while (true) { if (scanner.hasNextInt()) { number scanner.nextInt(); if (number 0) { break; } } System.out.print(输入无效请重新输入一个正数); scanner.next(); // 清除无效输入 } System.out.println(你输入的正数是 number); // 文件读取 BufferedReader reader new BufferedReader(new FileReader(data.txt)); String line; while ((line reader.readLine()) ! null) { System.out.println(line); } reader.close();while循环的一般形式是while循环的执行过程第一步检查“条件表达式”是否为true第二步如果“条件表达式”结果为true则执行大括号里面的循环体语句之后再进入第一步第三步如果“条件表达式”结果为false则跳出while循环进入第四步第四步执行while循环大括号后面的语句。while循环中当大括号里面只有一条语句时可以省略大括号。3.3 循环语句中的break语句和continue语句break语句简单地说就是终止当前循环语句使程序跳出循环体所谓“循环体”是指循环语句中由大括号括起来的所有语句直接执行循环语句大括号后面的语句continue语句则是跳过循环体中的“continue”语句后面的语句直接进入下一次循环。// break和continue示例 public static void main(String[] args) { int i 0; while(i 50) { i; if (i % 2 0) // 如果是偶数 continue; // 跳过本次循环的剩余部分 int cube i * i * i; // 计算立方 System.out.println(i 的立方是 cube); if (cube 1000) // 如果立方超过1000 break; // 终止循环 } System.out.println(循环结束); }更多break和continue示例// break在嵌套循环中的应用4. 总结与最佳实践4.1 三大流程控制语句核心要点总结顺序语句核心要点程序默认的执行方式从上到下逐条执行用大括号{}将一组语句组织成代码块适用于线性、无分支的业务逻辑分支语句核心要点if语句最基本的条件判断根据布尔表达式决定是否执行某段代码if...else语句二选一的分支结构根据条件执行不同的代码块if...else if...else语句多条件分支按顺序检查条件执行第一个为真的分支switch...case语句基于特定值的多分支选择适合离散值的匹配循环语句核心要点for循环明确知道循环次数时使用包含初始化、条件判断、迭代三个部分while循环条件满足时持续执行适合不确定循环次数的场景break语句立即终止当前循环跳出循环体continue语句跳过本次循环剩余代码直接进入下一次循环4.2 最佳实践建议选择合适的分支语句简单条件判断使用if语句二选一场景使用if...else语句多条件判断条件数量少2-3个使用if...else if...else条件数量多且基于离散值优先使用switch语句条件复杂或需要范围判断使用if...else if...elseswitch语句适用场景基于枚举值、字符串或整数的多分支选择Java 12推荐使用箭头语法避免case穿透需要返回值时使用switch表达式循环语句的选择策略已知循环次数优先使用for循环结构清晰未知循环次数使用while循环特别是需要先判断条件再执行的情况至少执行一次考虑使用do...while循环本文未涉及但值得了解遍历集合或数组优先使用增强for循环for-each代码质量与可维护性避免深层嵌套if/switch嵌套不要超过3层超过时应考虑重构使用大括号即使只有一行代码也使用大括号明确代码块范围条件表达式清晰复杂的条件判断应提取为布尔变量或方法switch最佳实践总是包含default分支处理未预料情况Java 12使用箭头语法避免忘记break复杂的switch逻辑考虑使用多态或策略模式替代循环控制避免无限循环确保循环条件最终会变为false合理使用break和continue但不要滥用嵌套循环时考虑性能影响实际项目中的应用建议业务逻辑分层将复杂的条件判断封装到独立的方法中使用设计模式对于复杂的分支逻辑考虑使用策略模式、状态模式等代码可读性为复杂的条件或循环添加注释说明性能考虑将最可能成立的条件放在前面避免在循环条件中进行复杂计算考虑循环展开等优化技术在性能关键路径上测试覆盖确保所有分支和循环路径都有相应的测试用例4.3 常见错误与调试技巧常见错误忘记break语句在传统switch语句中导致case穿透条件表达式错误使用赋值运算符而不是比较运算符无限循环忘记更新循环控制变量边界条件错误循环次数多一次或少一次空指针异常在条件判断前未检查对象是否为null调试技巧使用调试器单步执行观察程序流程添加日志在关键分支和循环处输出日志边界测试测试边界条件和特殊情况代码审查请同事检查复杂的条件逻辑单元测试为每个分支和循环路径编写测试用例总结流程控制语句是编程的基础合理使用顺序、分支和循环语句可以构建出清晰、高效、可维护的程序。在实际开发中应根据具体场景选择最合适的控制结构并遵循最佳实践同时注意避免常见错误。随着Java语言的发展新的语法特性如switch表达式也为我们提供了更简洁、安全的编码方式。

相关新闻

PHP 源码怎么加密防破解?三套方案实战指南

PHP 源码怎么加密防破解?三套方案实战指南

导语PHP 源文明文部署,核心逻辑一 cat 就被读走。本文讲透字节码加密与源码混淆两条路线,给出 SG16 Pro、IonCube、DECK V5 三套方案的选型与三步实操,覆盖外包交付、SaaS、商业分发等典型场景,文末附 PHP 5.6 到 8.4 全版本兼容说…

2026/10/4 15:10:32 阅读更多 →
日本AI行业现状与未来岗位趋势报告

日本AI行业现状与未来岗位趋势报告

一、行业概览2024年,日本AI系统市场规模达到1.34万亿日元,同比增长56.5%,预计2029年将扩张至4.19万亿日元,年均复合增长约25%。全球AI市场从2024年的1840亿美元预计攀升至2030年的8267亿美元。生成式AI是增长的核心引擎。全球生成…

2026/10/13 1:48:42 阅读更多 →
算力中心成本优化实战:硬件配置、能源效率与Kubernetes调度

算力中心成本优化实战:硬件配置、能源效率与Kubernetes调度

算力中心建设与成本优化实战指南在数字化转型浪潮中,算力中心作为数字经济的核心基础设施,其建设与运营成本控制成为企业关注的重点。本文将从实际案例出发,系统分析算力中心建设中的成本陷阱,并提供完整的优化方案和实战代码示例…

2026/10/11 8:14:13 阅读更多 →

最新新闻

西南交大数据库实验全集:MySQL 8.0实战闭环与避坑指南

西南交大数据库实验全集:MySQL 8.0实战闭环与避坑指南

简介:本资源是西南交通大学《数据库原理实验》课程配套的完整实践资料包,面向软件工程、人工智能等专业的本科生及数据库初学者,聚焦关系型数据库核心能力培养,覆盖从基础SQL操作到综合课程设计的全链路训练。压缩包共10个文件&am…

2026/10/13 14:32:42 阅读更多 →
为Claude Code配置Google搜索MCP:让AI编码助手实时联网,解决最新依赖与报错

为Claude Code配置Google搜索MCP:让AI编码助手实时联网,解决最新依赖与报错

前两天有位朋友问我:Claude Code 明明是个很能写的编码助手,为什么一遇到“最新版本的依赖怎么用”“这个报错网上有没有人碰到”就答不上来?我反手给他配了一个 Ace Data Cloud 的 Google Search MCP 服务,五分钟后他的 Claude C…

2026/10/13 14:32:42 阅读更多 →
MKV字幕提取全攻略:ffmpeg与mkvextract实操指南

MKV字幕提取全攻略:ffmpeg与mkvextract实操指南

简介:这是一份面向需要从MKV视频文件中提取SRT字幕的用户准备的便携工具资源,MKV作为常见多媒体容器常内嵌多种音轨与字幕轨,本包因此聚焦如何快速取出SRT字幕以适配字幕编辑、音视频转换或不支持内嵌字幕的播放设备。压缩包约34.39MB&#x…

2026/10/13 14:32:42 阅读更多 →
Java大模型开发没戏?拆解适配组件停更背后的真实出路

Java大模型开发没戏?拆解适配组件停更背后的真实出路

这两天的 Java 开发者社群里,最热闹的话题大概要数某个云厂商的 Java AI 适配组件被归档这件事。消息传出来之后,我朋友圈里不少后端开发的第一反应都是:Java 是不是彻底没戏了,要不要赶紧换 Python?说实话&#xff0c…

2026/10/13 14:32:42 阅读更多 →
STM32 HAL硬件I2C驱动MPU6050实战:时序适配与Clock Stretching补丁

STM32 HAL硬件I2C驱动MPU6050实战:时序适配与Clock Stretching补丁

简介:本资源是一套基于STM32F407ZG芯片、采用HAL库驱动硬件I2C与MPU6050六轴传感器通信的完整工程实践方案,面向嵌入式初学者及STM32进阶开发者,重点解决惯性传感器底层驱动、DMP固件加载与姿态解算等典型难点。压缩包共739个文件&#xff0c…

2026/10/13 14:32:42 阅读更多 →
PLSQL Developer 6.0.0.840汉化版深度解析与Oracle 9i适配指南

PLSQL Developer 6.0.0.840汉化版深度解析与Oracle 9i适配指南

简介:本资源为PL/SQL Developer 6.0.0.840汉化版安装包,面向Oracle数据库初学者、DBA及企业级开发人员,解决中文用户因语言障碍导致的工具上手难、功能理解偏差等问题。压缩包为RAR格式,大小8.17MB,内含完整可执行程序…

2026/10/13 14:31:41 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →