第三章 上 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/7/24 15:28:52 阅读更多 →
日本AI行业现状与未来岗位趋势报告

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

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

2026/7/23 7:28:54 阅读更多 →
算力中心成本优化实战:硬件配置、能源效率与Kubernetes调度

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

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

2026/7/23 7:28:54 阅读更多 →

最新新闻

2026年90kW电力测功机供应商靠谱选择指南

2026年90kW电力测功机供应商靠谱选择指南

在新能源汽车、电机、减速器及动力总成测试领域,90kW电力测功机因其覆盖中小型电驱动系统测试的广泛需求,成为研发与产线检测的核心设备。然而,面对市场上众多供应商,如何选择一家技术过硬、服务及时、长期稳定可靠的供应商&#…

2026/7/24 17:25:17 阅读更多 →
Ontology Agent 跨系统推理的三个真实场景 —— 设备故障、订单履约、供应链风险怎么答得上来

Ontology Agent 跨系统推理的三个真实场景 —— 设备故障、订单履约、供应链风险怎么答得上来

引言:跨系统推理的胜负不在模型,在本体能不能接住 工业企业里 AI 问答最容易栽倒的地方不是单系统问答,而是跨系统问题。运维负责人一句“3 号车间主轴电机报 E-2047 故障,要不要立刻停机”,背后要拉设备档案、维修记录…

2026/7/24 17:25:17 阅读更多 →
从Agentique到BAML:LLM应用开发的类型安全迁移实践

从Agentique到BAML:LLM应用开发的类型安全迁移实践

上周在重构一个内部工具时,我遇到了一个典型问题:原本基于 Agentique 框架的 LLM 调用层,在业务量增长后开始频繁出现超时、响应不一致和错误处理混乱的情况。每次调整 prompt 或切换模型,都要在多个分散的配置文件和胶水代码里手…

2026/7/24 17:25:17 阅读更多 →
AI代码兼容性检测的“灰箱时刻”:当type hint与runtime dtype冲突、autograd上下文丢失、分布式通信协议错配——3类高危静默缺陷正在吞噬你的CI/CD流水线

AI代码兼容性检测的“灰箱时刻”:当type hint与runtime dtype冲突、autograd上下文丢失、分布式通信协议错配——3类高危静默缺陷正在吞噬你的CI/CD流水线

更多请点击: https://intelliparadigm.com 第一章:AI代码兼容性检测的“灰箱时刻”本质剖析 当AI生成的代码首次被集成进遗留系统时,既非完全透明(白箱),亦非彻底封闭(黑箱)&#x…

2026/7/24 17:25:17 阅读更多 →
【扣子数据库安全读写红线】:3类越权读写漏洞+4步合规加固法(含GDPR/等保3级实操清单)

【扣子数据库安全读写红线】:3类越权读写漏洞+4步合规加固法(含GDPR/等保3级实操清单)

更多请点击: https://codechina.net 第一章:扣子数据库安全读写红线总览 扣子(Coze)平台虽未开放底层数据库直接访问权限,但其 Bot、Workflow 与插件系统通过 API 与数据存储服务交互时,存在明确的安全边…

2026/7/24 17:25:17 阅读更多 →
Unity游戏皮肤定制全流程:从Shader编写到性能优化实战指南

Unity游戏皮肤定制全流程:从Shader编写到性能优化实战指南

1. 项目概述:为什么“皮肤定制”是Unity游戏开发者的必修课? 如果你是一名Unity开发者,或者正在学习Unity,那么“游戏皮肤定制”这个概念你一定不陌生。它听起来简单,不就是换个贴图、改个颜色吗?但当你真正…

2026/7/24 17:24:16 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻