Java常用流程控制语句实现原理解析

一、判断语句

最常用的顺序结构只能顺序执行,并不能进行判断和选择。于是便有了下面两种分支结构

  • if语句
  • switch语句

1. if语句

一个if语句包含一个布尔表达式和一条或多条语句。

1.1 判断语句1——if

if语句的第一种格式

if(关系表达式){
  语句体;
}

执行流程

  • 首先判断关系表达式结果是true还是false
  • 如果是true就执行语句体
  • 如果是false就不执行语句体

1.2 判断语句2——if...else

if语句的第二种格式:if...else

if(关系表达式) {
	语句体1;
}else {
	语句体2;
}

执行流程

  • 首先判断关系表达式结果是true还是false
  • 如果是true就执行语句体1
  • 如果是false就不执行语句体 2

1.3 判断语句3——if...else if...else

if语句的第三种格式:if...else if...else

if (判断条件1) {
  执行语句1;
} else if (判断条件2) {
  执行语句2;
}
...
}else if (判断条件n) {
  执行语句n;
} else {
  执行语句n+1;
}

执行流程

  • 首先判断关系表达式1结果是true还是false
  • 如果是true就执行语句体1
  • 如果是false就继续判断关系表达式2看其结果是true还是false
  • 如果是true就执行语句体2
  • 如果是false就继续判断关系表达3,看其结果是true还是false
  • ......
  • 如果没有任何关系表达式为true,就执行语句体n+1

注意:有多个if...else只执行一个

二、选择语句

1. 选择语句——switch

Switch语句格式:

switch(表达式) {
    case 常量值1:
    语句体1;
break;
    case 常量值2:
    语句体2;
break;
    ...
      default:
    语句体n+1;
    break;
}

执行流程

  • 首先计算出表达式的值
  • 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break结束
  • 如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束

注意事项:

  • 多个case后面的数值不可以重复
  • switch后面小括号当中只能说下列数据类型:
    • 基本数据类型:bytr/short/char/int
    • 引用数据类型:String字符串、eumn枚举
  • switch语句格式很灵活:
    • 前后顺序可以颠倒
    • break语句可以省略

2. case的穿透性

在switch语句中,如果case的后面不写break,将出现穿透现象。也就是不会继续判断下一个case的值,而是直接向后运行,直到遇到break,或者整体switch结束

由于case存在穿透性,因此我们在编写switch语句时,必须注意要写上break

三、循环结构

顺序结构的程序语句只能被执行一次。如果想要同样的操作多次执行,,就需要使用到循环结构。

常用的循环结构有三种:

  • for循环
  • while循环
  • do…while循环

循环结构由如下四部分组成:

  • 初始化语句:在循环最开始执行,而且执行一次
  • 条件判断:如果成立,则循环继续;否则退出循环
  • 循环体:指的是重复要做的事情,由若干行语句组成
  • 步进语句:每次循环之后都要进行的扫尾工作

1. for循环

for 循环语句是支持迭代的一种通用结构,利用每次迭代之后更新的计数器或类似的变量来控制迭代次数。for 循环语句是 while 循环的一种简化形式,执行的次数在执行前就已经确定。

语法格式如下:

for(初始化; 布尔表达式; 步进语句) {
  循环体
}

2. while循环

循环语句标准格式

while (条件判断){
	循环体
}

循环语句扩展格式:

初始化表达式
  while(布尔表达式){
    循环体
      步进语句
}

3. do…while循环

对于while语句而言,如果不满足条件,则不能进入循环。但有时候我们需要不满足条件,也至少执行一次。do…while循环和while循环相似,不同的是,do…while循环至少会执行一次。

do…while循环的标准格式:

do {
    循环体
}while(条件判断);

do…while循环的扩展格式:

初始化语句
do{
  循环体
    步进语句
}while(条件判断);

4. 三种循环的区别

如果条件判断没有满足过,那么for和while循环将会执行0次,do...while循环会至少执行一次

for循环的变量在小括号内定义,只有在循环内部才可以使用;while和do…while循环的初始化语句在外面,所以跳出循环后还可以继续使用

在已知循环次数的时候使用推荐使用for,循环次数未知的时推荐使用while

5. 跳出语句

berak语句:主要用在循环语句或者switch语句中,用来跳出整个语句块打断这个循环。它能跳出最里层的循环,并且继续执行该循环下面的语句。

continue语句:适用于任何循环控制结构中。作用是结束本次循环,继续下一次的循环 。

  • 在for循环中,continue语句使程序立即跳转到步进语句
  • 在while或者do…while循环中,程序立即跳转到布尔表达式的判断语句

6. 死循环

死循环就是循环的条件永远为true,是永不结束的循环 。标准格式为:

while(true){
  循环体
}

7. 嵌套循环

嵌套循环是指一个循环的循环体是另一个循环。如for循环里面还有一个for循环,这就是嵌套循环。总共的循环次数=外循环次数*内循环次数

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java 学习笔记(入门篇)_程序流程控制结构和方法

    程序流程控制结构和方法 程序流程控制结构分为:顺序.选择.循环以及异常处理结构.语句是程序的基本组成单位.在java中分简单语句和符合语句,简单语句就是一行代码,例如,privateint3=3;复合语句就是一些简单语句的组合了,例如一个方法等等.一般来说语句的执行流程是按顺序来进行的,但是当遇到一些特殊的条件,比如循环,这时候语句就会按照流程控制结构来进行了. (1)选择结构 选择结构用于根据不同的条件,实现不同的操作,它提供了一种机制,使得程序根据相应的条件运行对应的语句.java言语实现选

  • JSP+Servlet制作Java Web登录功能的全流程解析

    0.新建web项目 首先,在MyEclipse里新建java web项目,项目名为login.此时,项目中包含一个src文件夹和一个WebRoot文件夹,以及Java Web自带的JRE库文件夹和J2EE库文件夹.其中,在WebRoot文件夹下,包含了WEB-INF文件夹和一个index.jsp页面文件. 接下来,新建一个JSP页面,命名为login.jsp. 项目文件的结构如下: 1.设计login.jsp页面 打开login.jsp页面后,修改第一行的代码为pageEncoding="utf

  • Java+MyBatis+MySQL开发环境搭建流程详解

    主要搭建过程 1. pom.xml文件中加入mybatis和数据库依赖,这里使用mysql: <properties> <mybatis.version>3.2.3</mybatis.version> <mysql.version>5.1.26</mysql.version> <slf4j.api.version>1.7.5</slf4j.api.version> <testng.version>6.8.7&l

  • React获取Java后台文件流并下载Excel文件流程解析

    记录使用blob对象接收java后台文件流并下载为xlsx格式的详细过程,关键部分代码如下. 首先在java后台中设置response中的参数: public void exportExcel(HttpServletResponse response, String fileName, String sheetName, List<String> titleRow, List<List<String>> dataRows) { OutputStream out = nu

  • Java二维码登录流程实现代码(包含短地址生成,含部分代码)

    近年来,二维码的使用越来越风生水起,笔者最近手头也遇到了一个需要使用二维码扫码登录网站的活,所以研究了一下这一套机制,并用代码实现了整个流程,接下来就和大家聊聊二维码登录及的那些事儿. 二维码原理 二维码是微信搞起来的,当年微信扫码二维码登录网页微信的时候,感觉很神奇,然而,我们了解了它的原理,也就没那么神奇了.二维码实际上就是通过黑白的点阵包含了一个url请求信息.端上扫码,请求url,做对应的操作. 一般性扫码操作的原理 微信登录.支付宝扫码支付都是这个原理: 1. 请求二维码 桌面端向服务

  • 微信小程序后端(java)开发流程的详细步骤

    微信小程序后端开发流程根据官网总结为两个步骤 1.前端调用 wx.login 返回了code,然后调用wx.getUserInfo获取到用户的昵称 头像 2.服务端根据code去微信获取openid, 接口地址: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html%EF%BC%9B%E5%90%8C%E6%97%B6%EF%BC%8C%E6%9B%B4

  • Java类加载机制实现流程及原理详解

    前言 我们知道,Java项目编译后会生成许许多多的class文件,class文件保存着类的描述信息.虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转化解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 类的生命周期 类从被加载到虚拟机内存中开始,到卸载出内存位置,他的整个生命周期包括: 加载验证准备解析初始化使用卸载 这七个阶段.画个图就是下面这样: 其中,类加载的过程包括了加载.验证.准备.解析.初始化这五个阶段.其中加载.验证.准备.初始

  • java微信支付接入流程详解

    背景 由于项目是采用java编写的,微信包括微信支付大都是php相关,于是微信支付官方文档对java的支持就不是很友好,在网上找了很多文章,基本上没有一篇是真正跑的通的,经过一番整理,先将java接入微信支付详细流程总结出来以便后续使用. 步骤一 准备阶段:已认证微信号,且通过微信支付认证,这个可以看微信文档,很详细,这里就不再重复. 步骤二 配置授权目录,官方推荐使用https类型的url,不知道http能不能行,个人也推荐使用https的保证不会错. 配置授权域名 步骤三 微信支付二次开发所

  • 微信 java 实现js-sdk 图片上传下载完整流程

    最近做的一个项目刚好用到微信js-sdk的图片上传接口,在这里做一下总结. 在这里能知道使用js api的基本配置 https://mp.weixin.qq.com/wiki t=resource/res_main&id=mp1421141115&token=&lang=zh_CN 我这里没有用checkJsApi去判断当前客户端版本是否支持指定JS接口,好.通过看开发文档,我们知道调用js接口直接都要通过config接口注入权限验证配置 <code class="

  • Java常用流程控制语句实现原理解析

    一.判断语句 最常用的顺序结构只能顺序执行,并不能进行判断和选择.于是便有了下面两种分支结构 if语句 switch语句 1. if语句 一个if语句包含一个布尔表达式和一条或多条语句. 1.1 判断语句1--if if语句的第一种格式 if(关系表达式){ 语句体; } 执行流程 首先判断关系表达式结果是true还是false 如果是true就执行语句体 如果是false就不执行语句体 1.2 判断语句2--if...else if语句的第二种格式:if...else if(关系表达式) {

  • java同步器AQS架构AbstractQueuedSynchronizer原理解析下

    目录 引导语 1.释放锁 1.1.释放排它锁release 1.2.释放共享锁releaseShared 2.条件队列的重要方法 2.1.入队列等待await 2.1.1.addConditionWaiter 2.1.2.unlinkCancelledWaiters 2.2.单个唤醒signal 2.3.全部唤醒signalAll 3.总结 引导语 AQS 的内容太多,所以我们分成了两个章节,没有看过 AQS 上半章节的同学可以回首看一下哈,上半章节里面说了很多锁的基本概念,基本属性,如何获得锁

  • java同步器AQS架构AbstractQueuedSynchronizer原理解析

    目录 引导语 1.整体架构 1.1.类注释 1.2.类定义 1.3.基本属性 1.3.1.简单属性 1.3.2.同步队列属性 1.3.3.条件队列的属性 1.3.4.Node 1.3.5.共享锁和排它锁的区别 1.4.Condition 2.同步器的状态 3.获取锁 3.1.acquire排它锁 3.1.1.addWaiter 3.1.2.acquireQueued 3.2.acquireShared获取共享锁 4.总结 引导语 AbstractQueuedSynchronizer 中文翻译叫做

  • Java方法覆盖重写实现原理解析

    这篇文章主要介绍了Java方法覆盖重写实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 方法覆盖重写注意事项: 1.必须保证方法名相同,返回值也相同 @Override:写在方法前面,用来检测方法的覆盖重写是否有效,这个注解不是必要的,就算不写,方法覆盖重写符合要求也是正确的 2.子类方法的返回值必须[小于等于]父类方法的返回值 3.子类方法的修饰符必须[大于等于]父类方法的修饰符 继承关系中,父子类构造方法的访问特点: 1.子类构造

  • java instanceof操作符使用及原理解析

    这篇文章主要介绍了java instanceof操作符使用及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 a intanceof A:判断a是否是类A的的一个实例,返回值为boolean public class Person extends Object{} public class Student extends Person{} public class Graduate extends Person{} public clas

  • Java枚举类接口实例原理解析

    这篇文章主要介绍了Java枚举类接口实例原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 枚举类可以实现一个或多个接口.与普通类实现接口完全一样,枚举类实现接口时,需要实现该接口所包含的方法. 如果需要每个枚举值在调用同一个方法时呈现不同的行为,则可以让每个枚举值在{...}匿名块中实现自己的业务逻辑. public interface IGradeHandler { String getGrade(String studentName)

  • Java日期与时间类原理解析

    这篇文章主要介绍了Java日期与时间类原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 基础知识 日期: 类似于 2018-12-12 时间: 类似于 2018-12-12 12:12:12 时刻: 类似于 2018-12-12 12:12:12 地区: 计算机中的 Locale, 如 zh_CN, en_US 等, 影响着对于日期, 时间, 货币等格式的显示 EpochTime: 从 1970 年 1 月 1 日 UTC+00:00 到

  • Java三种移位运算符原理解析

    这篇文章主要介绍了Java三种移位运算符原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 java移位运算符不外乎就这三种:<<(左移).>>(带符号右移)和>>>(无符号右移). 1. 左移运算符 左移运算符<<使指定值的所有位都左移规定的次数. 1)它的通用格式如下所示: value << num num 指定要移位值value 移动的位数. 左移的规则只记住一点:丢弃最高位(符

  • Java基础异常处理代码及原理解析

    这篇文章主要介绍了java基础异常处理代码及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 异常的定义:中断了正常指令流的事件. try..catch..finally结构: class Test{ public static void main(String[] args){ System.out.println(1); try{ System.out.println(2); int i = 1 / 0; System.out.pri

  • java对象序列化与反序列化原理解析

    这篇文章主要介绍了java对象序列化与反序列化原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.序列化和反序列化的概念 对象转换为字节序列的过程称为对象的序列化.把字节序列恢复为对象的过程称为对象的反序列化. 二.序列化和反序列化的作用 对象的序列化主要有两种用途: 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中. 在网络上传送对象的字节序列.网络上传输的都是二进制序列. 在很多应用中,需要对某些对象进行序列化,让它们离开内

随机推荐