Java 流程控制
条件/选择结构
if
if(条件表达式){// 表达式为 true 时,执行该代码块
}
if(true) {System.out.println("hello");
}
if else
if(条件表达式){// 表达式为 true 时,执行该代码块
} else {// 表达式为 false 时,执行该代码块
}
if(1 == 2) {System.out.println("hello");
} else {System.out.println("hello,world");
}
if else if else
注意判断的顺序,后面的判断只有在前面的条件为 false 时才执行。
if(条件表达式1){// 表达式1为 true 时,执行该代码块
} else if(条件表达式2) {// 表达式2为 true 时,执行该代码块
} else {// 上述表达式都为 false 时,执行该代码块
}
int score = 70;if(score >= 90) {System.out.println("优秀");
} else if(score >= 80) {System.out.println("良好");
} else if(score >= 70) {System.out.println("一般");
} else if(score >= 60) {System.out.println("及格");
} else {System.out.println("不及格");
}
⭐switch(express) case
根据表达式的值匹配 case,匹配后执行后面的代码,遇到 break 结束,没有匹配的值则执行 default 后的语句。
case 值的类型可以是:byte、short、int、char(判断时转为整数)、枚举(Enum,有对应的整数)、String( 1.7 后。通过 hashcode 转换为整数比较,如果相同,再根据内容判断)。
case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
case 中的语句碰到 break 或者执行完后续所有语句才会停止,case 语句后面通常会加 break,也可利用这种特性( case 穿透)。
switch(条件) {case 情况1:语句1;break;// ...default:// 默认语句;
}
int month = 6;
switch(month) {case 3:case 4:case 5:// case 穿透System.out.println("春天");break;case 6:case 7:case 8:System.out.println("夏天");break;case 9:case 10:case 11:System.out.println("秋天");break;default:System.out.println("冬天");
}
循环结构
while
while(条件表达式){// 表达式为 true 时,执行该循环体代码块
}
int i = 7;
while(i > 5){System.out.println(i);i--;
}
do while
do {// 先不判断执行一次该循环体代码块,后面表达式为 true 时,执行该循环体代码块
} while(条件表达式)
int i = 5;
do {System.out.println(i);i--;
} while(i > 5);
for
for(初始化语句;判断循环条件;改变循环条件){// 循环条件判断为 true 时,执行该循环体代码块
}
for(int i = 0;i < 7;i++){System.out.println(i);
}
foreach
JDK1.5 引进了一种新的循环方式,称为 foreach 循环或者加强型循环。
foreach 不是一个关键字,它使用下面的形式来遍历数组或集合。
int[] arr = {1, 2, 3, 4};
for(int ele: arr) {System.out.println(ele);
}
循环控制
continue:跳过本次循环
for(int i = 0;i < 7;i++){if(i==3) continue;System.out.println(i);
}
break:结束循环
for(int i = 0; i < 7; i++){if(i == 3) break;System.out.println(i);
}
注意:break 后,i++ 不会再执行。
return:结束方法执行
lable 标记
Java 语言允许语句的前面有标签(label),相当于定位符,用于跳转到程序的任意位置,格式如下:
label:
语句;
标签可以是任意的标识符,但不能是保留字,语句部分可以是任意语句。
标签通常与 break 语句和 continue 语句配合使用,用于跳出特定的循环。
outer:
for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){if (i == 1 && j == 1) {break outer;}System.out.println("i=" + i + ", j=" + j);}
}
// i=0, j=0
// i=0, j=1
// i=0, j=2
// i=1, j=0
上面代码为一个双重循环区块,break 命令后面加上了 outer 标签。
满足条件时,直接跳出双层循环。如果 break 语句后面不使用标签,则只能跳出内层循环,进入下一次的外层循环。
continue 语句也可以与标签配合使用,满足条件时,会跳过当前循环,直接进入下一轮外层循环。如果 continue 语句后面不使用标签,则只能进入下一轮的内层循环。
⭐跳转指令
程序运行时,实际是一条条的指令,CPU 有一个 指令指示器,指向下一条要执行的指令,CPU 根据指示器的指示加载指令并且执行。
大部分指令是具体的操作和运算,在执行这些操作时,执行完一个操作后,指令指示器会自动指向下一条指令。
但有一些特殊的指令,称为 跳转指令,这些指令会修改指令指示器的值,让 CPU 跳到一个指定的地方执行。
跳转有两种:一种是条件跳转,条件跳转检查某个条件,满足则进行跳转;另一种是无条件跳转,无条件跳转是直接进行跳转。
选择结构和循环结构最终会转为这些跳转指令,比如:
int a = 10;
if( a % 2 == 0 ){System.out.println("偶数");
}
System.out.println("其它代码");
转换后的指令可能是:
int a = 10;
条件跳转:如果 a % 2 == 0,跳转到第 4 行
无条件跳转:跳转到第 5 行
System.out.println("偶数");
System.out.println("其它代码");
switch 的转换和具体系统实现有关。如果分支较少,可能会转为跳转指令;如果分支较多,条件跳转会进行多次的比较运算,效率比较低,可能会使用一种更高效的方式,叫跳转表。
跳转表是一个映射表,存储了可能的值(统一转为整数)以及要跳转的地址,跳转表值的存储空间一般为 32 位,容纳不下 long。
| 条件值 | 跳转地址 |
|---|---|
| 条件1 | 代码块1的地址 |
| 条件2 | 代码块2的地址 |
switch 表达式实质是整型值得比较,跳转表可以进行二分查找,为此,跳转表会进行排序,如果值比较连续的,还会进一步优化为数组,可以根据索引直接进行跳转。
相关文章:
Java 流程控制
条件/选择结构 if if(条件表达式){// 表达式为 true 时,执行该代码块 }if(true) {System.out.println("hello"); }if else if(条件表达式){// 表达式为 true 时,执行该代码块 } else {// 表达式为 false 时,执行该代码块 }if(1 …...
边界无限入选首届“网络安全高成长性企业”并荣获“勇创之星”
近日,由工业和信息化部、四川省人民政府主办的“2023年中国网络和数据安全产业高峰论坛网络安全产融合作分论坛”在成都举行,论坛上公布了“2022年度网络安全高成长性企业”名单。云原生安全、应用安全“灵动智御”理念创领者北京边界无限科技有限公司&a…...
SpringBoot项目的快速创建方式(包含第一个程序的运行)
目录 一、IDEA所用的版本以及插件 二、操作步骤 一、IDEA所用的版本以及插件 idea的版本: idea2022版本下载安装配置与卸载详细步骤(包含运行第一个java程序教程)_idea2022下载_云边的快乐猫的博客-CSDN博客 如果英文看不懂就点击…...
linux下设置定期执行需要root权限的sh文件
1、准备好一个shell文件 比如我这个叫clean.sh,位于/home/admin/gdhysthj/clean.sh 2、首先将shell文件赋权为可执行文件 chmod 777 clean.sh 3、切换为超级管理员 su 4、设置定时器 crontab -u root -e 5、回车后,进入一个类似vim的界面,…...
认识异或运算
1.什么是异或运算 异或运算是位运算的一种,符号为:^ 运算规则为:相同为0,不同为1 例如 性质: N ^ 0 N N ^ N 0 A ^ B B ^ A (A ^ B) ^ C A ^ (B ^ C)N ^ 0 N public class XorOperation {public static void …...
内容提供者的简单使用
内容提供者的简单使用 最近在复习ContentProvider时遇到了一些问题,几经波折,终于解决了,故写下这篇博客,希望能帮到有相同问题的兄弟。 何时使用 当我们想要一个应用的数据向外部公开时,ContentProvider是一个不错…...
Modelsim 操作结构和流程
用到的命令一般都写到.do文件中,使用脚本语言进行批量处理。Step 1: Map librariesStep 2: Compile the designStep 3: Optimize the design (OPTIONAL)Step 4: Load the design into the simulatorStep 5: Run the simulationStep 6: Debug the design Note: Desig…...
vue和react有什么不同
vue上手难度低,不过react社区活跃度更多一些,一般数据比较多的大型项目会倾向于使用react。在react官网中,官方也建议我们使用React来构建快速响应的大型 Web 应用程序。vue2.0是面向对象编程({data: {}, methods: {}, created() …...
js求解《初级算法》28. 找出字符串中第一个匹配项的下标
一、题目描述 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 输入:haystack "sadb…...
VAE--part1
Variational Auto-Encoder, VAE__part1分布变换VAE慢谈VAE 初现分布标准化重参数技巧VAE的本质是什么?VAE的本质结构正态分布?变分在哪里参考博客仅做学习记录,侵删分布变换 VAE和GAN都是生成式模型,它们俩的目标基本一致&#x…...
备战四级!!!
目录 一、替换词 二、作文常见句型 (1)常见开头 (2)阐述观点 (3)结束语 (4)提出建议 (5)表示论证 (6)给出原因 (…...
sizeof与strlen练习
前言 本篇仅仅是为了更加了解sizeof操作符和strlen函数练习. 对于多条sizeof操作符和strlen函数出现,可能很容易造成头脑不清晰,做题时容易混乱. 目录前言一维数组字符数组情况1:情况2情况3二维数组练习之前请牢记下面这段话.这将是头脑清晰地关键. 提示: sizeof(数组名)&#…...
知识图谱的介绍
知识图谱的由来 谷歌在2012年提出了知识图谱的概念,当时目的在于优化搜索引擎的返回结构,为用户提供更精确的结果。 知识图谱的定义 为了理解知识图谱,我们首先要明白信息与知识的概念。首先,信息表示的是外部的客观事实&#…...
【Redis】Redis高级客户端Lettuce详解
文章目录前提Lettuce简介连接Redis定制的连接URI语法基本使用API同步API异步API反应式API发布和订阅事务和批量命令执行Lua脚本执行高可用和分片普通主从模式哨兵模式集群模式动态命令和自定义命令高阶特性配置客户端资源使用连接池几个常见的渐进式删除例子在SpringBoot中使用…...
Qt——自定义界面之QStyle
1. Qt控件结构简介 首先我们要来讲讲GUI控件结构,这里以QComboBox为例: 一个完整的控件由一种或多种GUI元素构成: Complex Control Element。Primitive Element。Control Element。 1.1 Complex Control Element Complex control elements …...
指针和数组面试题(逐题分析,完善你可能遗漏的知识)
人生不是一种享乐,而是一桩十分沉重的工作。 —— 列夫托尔斯泰 前言:之前我们就学习了数组和指针的知识。 数组:数组就是能够存放一组相同类型的元素,数组的大小取决于数组的元素个数和元素类型。 指针:…...
centos7搭建nfs挂载日志目录完整步骤
NFS服务器配置 1.安装NFS服务 首先使用yum安装nfs服务: yum -y install rpcbind nfs-utils 2.创建共享目录 在服务器上创建共享目录,并设置权限。 mkdir /data/share/ chmod 755 -R /data/share/ 3.配置NFS nfs的配置文件是 /etc/exports &…...
三、JavaScript
目录 一、JavaScript和html代码的结合方式 二、javascript和java的区别 1、变量 2、运算 3、数组(重点) 4、函数 5、重载 6、隐形参数arguments 7、js中的自定义对象 三、js中的事件 四、DOM模型 五、正则表达式 一、JavaScript和html代码的结合方…...
深圳大学计软《面向对象的程序设计》实验11 多继承
A. 在职研究生(多重继承) 题目描述 1、建立如下的类继承结构: 1)定义一个人员类CPeople,其属性(保护类型)有:姓名、性别、年龄; 2)从CPeople类派生出学生类CStudent,…...
并发变成实战-原子变量与非阻塞同步机制
文章目录1.锁的劣势2.硬件对并发的支持2.1 比较并交换2.2 非阻塞的计数器3.原子变量类3.1 原子变量是一种“更好的volatile”3.2 性能比较:锁与原子变量4.非阻塞算法4.1 非阻塞的栈4.2 非阻塞的链表4.3 ABA问题非阻塞算法设计和实现上要复杂的多,但在可伸…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
