[Java基础] 流程控制

[Java基础] 运算符

[Java基础] 基本数据类型

[Java基础] Java HashMap 的数据结构和底层原理

目录

基本语法

条件语句

if 语句

if-else 语句

switch 语句

循环语句

for 循环

while 循环

do-while 循环

跳转语句

break 语句

continue 语句

return 语句

最佳实践

保持简洁

使用早期返回

利用switch表达式

避免深层循环

循环中的break与continue

常量和变量命名

函数化复杂逻辑

注释

使用三元运算符

错误处理

常见面试题

解释if-else和switch语句的区别?

for循环和while循环有什么不同?

什么是break和continue?它们如何工作?

给出一个使用三元运算符的例子?

在switch语句中,default关键字的作用是什么?

请解释do-while循环与while循环的区别?

如何避免无限循环?

return语句在方法中的作用是什么?

基本语法

Java 提供了多种流程控制语句,用于控制程序的执行流程。这些语句包括条件语句(如 if-else, switch)、循环语句(如 for, while, do-while)和跳转语句(如 break, continue, return)。下面我将分别介绍这些语句,并给出一些示例代码。

条件语句

if 语句

if 语句用于基于一个布尔表达式的值来决定是否执行一段代码块。

int number = 10;
if (number > 5) {System.out.println("Number is greater than 5.");
}

if-else 语句

if-else 语句允许在条件为真时执行一段代码,在条件为假时执行另一段代码。

int number = 3;
if (number > 5) {System.out.println("Number is greater than 5.");
} else {System.out.println("Number is 5 or less.");
}

switch 语句

switch 语句可以用来替代多个 if-else 语句,它基于变量的值选择要执行的代码块。

int day = 3;
String dayOfWeek;
switch (day) {case 1: dayOfWeek = "Monday"; break;case 2: dayOfWeek = "Tuesday"; break;case 3: dayOfWeek = "Wednesday"; break;// 更多case...default: dayOfWeek = "Invalid day";
}
System.out.println(dayOfWeek);

从 Java 12 开始,你可以使用 switch 表达式,这更加简洁:

int day = 3;
String dayOfWeek = switch (day) {case 1 -> "Monday";case 2 -> "Tuesday";case 3 -> "Wednesday";// 更多case...default -> "Invalid day";
};
System.out.println(dayOfWeek);

循环语句

for 循环

for 循环用于重复执行一段代码固定的次数或遍历集合中的元素。

// 打印数字1到5
for (int i = 1; i <= 5; i++) {System.out.println(i);
}

while 循环

while 循环会一直执行一段代码直到指定的条件不再满足。

int count = 1;
while (count <= 5) {System.out.println(count);count++;
}

do-while 循环

do-while 循环类似于 while 循环,但它保证至少执行一次循环体,因为它是先执行后判断。

int count = 1;
do {System.out.println(count);count++;
} while (count <= 5);

跳转语句

break 语句

break 语句用于立即退出当前循环或 switch 语句。

for (int i = 1; i <= 10; i++) {if (i == 5) {break; // 当i等于5时退出循环}System.out.println(i);
}

continue 语句

continue 语句用于跳过当前循环的剩余部分,并开始下一次迭代。

for (int i = 1; i <= 10; i++) {if (i % 2 == 0) {continue; // 如果i是偶数则跳过这次循环}System.out.println(i);
}

return 语句

return 语句用于从方法中返回结果并结束该方法的执行。

public int addNumbers(int a, int b) {return a + b; // 返回a与b之和
}

最佳实践

在Java中使用流程控制语句时,遵循一些最佳实践可以帮助你编写出更清晰、更易于维护和扩展的代码。以下是一些关于如何更好地使用流程控制语句的最佳实践:

保持简洁

  • 减少嵌套:尽量减少if-else或循环的嵌套层次。过多的嵌套会使代码难以阅读和理解。
  • 简化条件:如果可能的话,将复杂的条件逻辑分解成多个简单的条件,或者将其封装到方法中。

使用早期返回

  • 在处理函数逻辑时,可以考虑使用“早期返回”策略来避免不必要的嵌套。例如,在检查参数有效性时,如果发现无效可以直接返回,而不是继续执行更多的逻辑。
public void processUser(User user) {if (user == null) {throw new IllegalArgumentException("User cannot be null");}// 继续处理有效用户
}

利用switch表达式

  • 对于基于枚举或有限集合的多分支选择,使用switch表达式通常比多重if-else更加清晰。
public String describeDay(DayOfWeek day) {//这种写法在Java 12以及后面的版本才支持return switch (day) {case MONDAY -> "Start of the week";case FRIDAY -> "End of the workweek";default -> "Mid-week or weekend";};
}

避免深层循环

  • 如果你的算法需要多层循环,确保每一层都有其明确的目的,并且尝试通过算法优化来减少循环层数。

循环中的breakcontinue

  • 合理使用breakcontinue可以使循环结构更加简洁。但是要谨慎使用,以防止意外地跳过重要逻辑。
  • break用于完全退出循环,而continue用于跳过当前迭代并继续下一次迭代。

常量和变量命名

  • 使用有意义的名字来表示常量和变量名称,尤其是那些在条件判断中使用的变量。

函数化复杂逻辑

  • 如果一段条件逻辑变得过于复杂,考虑将其提取到一个单独的方法中。这样不仅可以提高可读性,减少一个方法的行数,还方便了代码复用。

注释

  • 对于复杂的条件或循环逻辑,适当的注释是必要的,但应避免对非常直观的代码添加冗余注释。

使用三元运算符

  • 对于简单的条件判断,可以使用三元运算符来代替if-else,这有助于保持代码简短。
int a = 10, b = 20;
int max = (a > b) ? a : b; // 使用三元运算符求最大值

错误处理

  • 在循环和条件语句中适当地处理异常情况。不要让异常未经处理就传播出去,除非这是有意为之的设计。

常见面试题

Java流程控制语句是面试中常见的考察点,因为它们是编程的基础。面试官通常会通过这些问题来评估候选人对基础概念的理解以及解决实际问题的能力。以下是一些常见的关于Java流程控制语句的面试题:

解释if-elseswitch语句的区别?

  • 答案if-else语句可以处理任意条件表达式,并且可以嵌套使用。而switch语句主要用于基于一个变量的不同值来执行不同的代码块,这个变量通常是整数、字符或枚举类型(从Java 7开始支持字符串)。switch在某些情况下可以使代码更简洁和易读。

for循环和while循环有什么不同?

  • 答案for循环更适合于已知迭代次数的情况,因为它允许你在声明中初始化计数器、设置终止条件并更新计数器。while循环则用于不确定何时停止的场景,它会在每次迭代前检查条件。

什么是breakcontinue?它们如何工作?

  • 答案break用于立即退出当前循环或switch语句。continue用于跳过当前循环的剩余部分,并直接开始下一次迭代。两者都可以用来控制循环的行为,但用途不同。

给出一个使用三元运算符的例子?

  • 示例代码
int a = 10, b = 20;
int max = (a > b) ? a : b; // 如果a大于b,则max为a;否则为b

switch语句中,default关键字的作用是什么?

  • 答案default关键字定义了当所有case都不匹配时要执行的代码块。它是可选的,但如果提供了,通常放在switch语句的最后。

请解释do-while循环与while循环的区别?

  • 答案do-while循环至少执行一次循环体,即使条件一开始就不满足。while循环只有在条件满足时才会执行循环体。因此,do-while保证了至少一次执行。

如何避免无限循环?

  • 答案:确保循环有一个明确的结束条件,并且在循环体内有正确的逻辑来更新该条件。例如,在forwhile循环中,需要确保计数器或条件最终能够达到退出循环的状态。

return语句在方法中的作用是什么?

  • 答案return语句用于从方法返回结果并结束方法的执行。如果方法返回一个值,那么return后面必须跟上相应的返回值。对于void方法,return可以省略,或者用来提前结束方法的执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/56499.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式基础 -- SDIO协议

SDIO 硬件、协议与 Linux 驱动技术文档 1. SDIO 简介 SDIO&#xff08;Secure Digital Input Output&#xff09;协议是SD存储卡的物理接口扩展&#xff0c;允许通过SD总线连接和控制各种I/O设备&#xff0c;如Wi-Fi、蓝牙、GPS模块等。SDIO协议在标准的SD协议基础上扩展&…

【题解】【记忆化递归】——Function

【题解】【记忆化递归】——Function Function题目描述输入格式输出格式输入输出样例输入 #1输出 #1 提示数据规模与约定 1.思路解析2.AC代码 Function 通往洛谷的传送门 题目描述 对于一个递归函数 w ( a , b , c ) w(a,b,c) w(a,b,c) 如果 a ≤ 0 a \le 0 a≤0 或 b ≤…

大厂面试真题-具体说说jdk1.7和1.8的hashmap的线程不安全都有什么问题

HashMap在JDK 1.7和JDK 1.8中都存在线程不安全的问题&#xff0c;但具体表现和解决方式有所不同。以下是对这两个版本中HashMap线程不安全问题的详细分析&#xff1a; JDK 1.7 HashMap的线程不安全问题 在JDK 1.7中&#xff0c;HashMap的线程不安全问题主要体现在扩容过程中。…

阿里Dataworks使用循环节点和赋值节点完成对mongodb分表数据同步

背景 需求将MongoDB数据入仓MaxCompute 环境说明 MongoDB 100个Collections&#xff1a;orders_1、orders_2、…、orders_100 前期准备 1、MongoDB数据源配置 需要先保证DW和MongoDB网络是能够联通的&#xff0c;需要现在集成任务中配置MongoDB的数据源信息。 具体可以查…

项目分析:自然语言处理(语言情感分析)

在这个信息爆炸的时代&#xff0c;我们每天都在与海量的文本数据打交道。从社交媒体上的帖子、在线评论到新闻报道&#xff0c;文本信息无处不在。然而&#xff0c;这些文本不仅仅是文字的堆砌&#xff0c;它们背后蕴含着丰富的情感和观点。如何有效地理解和分析这些情感&#…

【AI知识点】对比学习(Contrastive Learning)

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】 对比学习&#xff08;Contrastive Learning&#xff09; 是一种基于样本之间相似性和差异性的无监督或自监督学习方法&#xff0c;旨在通过构建正例和负例对来学习数据的有效表示。对比学习广泛应用于自然语言处理&#…

Linux下的防病毒软件(Antivirus software for Linux)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

FFmpeg的简单使用【Windows】--- 指定视频的时长

目录 功能描述 效果展示 代码实现 前端代码 后端代码 routers 》users.js routers 》 index.js app.js 功能描述 此案例是在上一个案例【FFmpeg的简单使用【Windows】--- 视频混剪添加背景音乐-CSDN博客】的基础上的进一步完善&#xff0c;可以先去看上一个案例然后再…

docker环境安装mongoDB实现平滑迁移实战

docker环境安装mongoDB实现平滑迁移实战 一、备份原始数据&#xff08;从别的服务器备份到当前服务器&#xff09;二、数据迁移三、迁移过程日志打印四、验证迁移数据准确性 一、备份原始数据&#xff08;从别的服务器备份到当前服务器&#xff09; 使用mongodump工具对原始mo…

Redisson使用全解

redisson使用全解——redisson官方文档注释&#xff08;上篇&#xff09;_redisson官网中文-CSDN博客 redisson使用全解——redisson官方文档注释&#xff08;中篇&#xff09;-CSDN博客 redisson使用全解——redisson官方文档注释&#xff08;下篇&#xff09;_redisson官网…

Java发送请求实现QPS限制

业务场景 在开发中&#xff0c;当有业务需求需要调用第三方服务实现功能&#xff0c;但是服务接口有QPS限制&#xff0c;所以我们需要在发送请求时限制发送频率防止请求失败。 实现方法 使用 Java Semaphore 类来实现控制请求QPS QPS限制 Component public class QPSControll…

洛谷P1484.种树

洛谷P1484.种树 题目解析及思路 题目要求在一条n个坑的路上&#xff0c;对于已知每个坑种树的收益&#xff0c;并且相邻两个坑不能同时种树的情况下&#xff0c;求最大收益 思考一个小范围的例子(不考虑数组全负数)&#xff1a; 当m 1时&#xff0c;答案一定为数组中的最大…

MySQL 8.4修改user的host属性值

MySQL 8.4修改user的host属性值 update mysql.user set host localhost where user mysql用户名; MySQL 8.4修改初始化后的默认密码-CSDN博客文章浏览阅读804次&#xff0c;点赞6次&#xff0c;收藏11次。先下载mysql的zip压缩包&#xff1a;MySQL :: Download MySQL Communi…

贪心day1

文章目录 前言雪糕的最大数量重新分装苹果装满石头的背包的最大数量K 次取反后最大化的数组和不同整数的最少数目 前言 &#x1f4ab;你好&#xff0c;我是辰chen&#xff0c;本文旨在准备考研复试或就业 &#x1f4ab;文章题目大多来自于 leetcode&#xff0c;当然也可能来自洛…

51、AVR、ARM、DSP等常用芯片之对比

51芯片 51芯片通常指的是基于8051内核的单片机&#xff0c;这是一种经典的微控制器&#xff08;MCU&#xff09;。虽然关于51芯片的详细现代应用和发展可能因具体型号和厂商而有所不同&#xff0c;但基于8051内核的单片机通常具有以下特点&#xff1a; 结构经典&#xff1a;8…

STL-string

STL的六大组件&#xff1a; string // string constructor #include <iostream> #include <string> using namespace std; int main() {// 构造std::string s0("Initial string");std::string s1; //nullptrstd::string s2("A character sequenc…

【在Linux世界中追寻伟大的One Piece】Jsoncpp|序列化

目录 1 -> Jsoncpp 1.1 -> 特性 1.2 -> 安装 2 -> 序列化 3 -> 反序列化 4 -> Json::Value 1 -> Jsoncpp Jsoncpp是一个用于处理JSON数据的C库。它提供了将JSON数据序列化为字符串以及从字符串反序列化为C数据结构的功能。Jsoncpp是开源的&#xf…

RHCSA复习题

第一~七章 1.创建以下目录和文件结构&#xff0c;并将/yasuo目录拷贝4份到/目录下。 [rootlocalhost ~]# mkdir /yasuo [rootlocalhost ~]# mkdir /yasuo/dir1 [rootlocalhost ~]# cd /yasuo/dir1 [rootlocalhost dir1]# touch hostname hostname02 passwd ssh_config sshd [r…

深度学习:模型攻击(Model Attack)详解

模型攻击&#xff08;Model Attack&#xff09;详解 模型攻击通常指在机器学习和人工智能领域中&#xff0c;故意设计的行为或方法&#xff0c;旨在操纵或欺骗机器学习模型的输出。这类攻击可能导致模型做出错误的决策或泄露敏感信息&#xff0c;对于安全性至关重要的应用&…

F5-TTS开源项目详解:非自回归语音合成技术革新与应用场景

在现代科技的推动下&#xff0c;语音合成技术取得了长足的进步。随着越来越多的场景开始依赖语音交互&#xff0c;如何高效、自然地生成语音成为了行业的一个重要课题。今天我们要讨论的是一个在语音合成领域备受瞩目的开源项目——F5-TTS。它不仅采用了非自回归架构&#xff0…