Java流程控制:选择结构

Java知识点总结:想看的可以从这里进入

3、流程控制


在所有编程语言中都会有三种基础的流程结构

  • 顺序结构
  • 选择结构
  • 循环结构

流程结构可以控制作用于内代码的执行流程。这个作用域在Java中称为 。块就是程序中用 {} 括起来的若干Java语句。块可以互相嵌套,嵌套的代码块中不能存在同名的变量

class Block {
    {

    }
}

3.1、顺序结构

这是所有语言中最常见的结构,正常情况下java的代码都是按照语法从上到下的顺序执行,中间没有任何判断和跳转。

3.2、选择结构

选择结构主要用来进行判断,它能根据不同的条件选择不同的执行方案。适合于带有逻辑或关系比较等条件判断的计算。

在Java中选择结构有两种实现方式

  • if、elese 语句
  • switch 语句
3.2.1、if else

if 语句是告诉程序在满足某种条件时需要执行的语句,它通过布尔表达式来确定一段代码是否要执行。

  1. 简单的if条件语句

    if(布尔表达式){
        //代码块  如果布尔表达式结果为true则执行内部代码,否则不执行
    }
    
  2. if…else语句:条件为真时执行一个代码块,否则执行另一个代码块。

    if(布尔表达式){
        //代码块  如果布尔表达式结果为true则执行此代码
    }else{
         //代码块  如果布尔表达式结果为false则执行此代码
    }
    
  3. 多分支语:用于处理更复杂的条件。

    if(布尔表达式){
        //代码块  如果布尔表达式结果为true则执行内部代码
    }else if(布尔表达式){	//else if可以重复书写,多条件判断
        //代码块  如果布尔表达式结果为true则执行内部代码
    }else{		//else必须放在最后
        //代码块  如果以上条件都不满足则执行此代码
    }
    

image-20210618153208261

如果是多条件的话,要注意条件的先后顺序:

1、如果所有的条件没有交集,可以不考虑顺序

2、如果条件之间有交集的话,需要根据情况调整先后顺序

3、如果条件之间有包含的关系,则应该将范围小的放在上面

3.2.2、switch

switch也是一种选择语句,当一个表达式有多个选项时,使用switch比使用if 更简洁易懂。switch语句是判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。一般和case、default一起使用

​ 语法规则:

  • switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
  • case 语句中的值的数据类型必须与变量的数据类型相同
  • 当case后的值和表达式的值匹配后,开始执行,直到遇到break后,switch才会结束,否则程序会继续执行下一条 case 语句,直到出现 break 语句。
  • switch 语句可以包含一个 default 分支,一般放在最后。default 在没有 case 语句的值和变量值相等的时候执行。
switch(表达式){		//表达式类型:byte、short、int 、char、String	类型必须和case条件中value的类型相同
    case value1:	//如果变量的值 == value1 则执行此case内语句
        //语句
        break;		//break代表switch结束
    case value2:	//如果变量的值 == value2 则执行此case内语句
        //语句
        break;
        .....
    default:		//可选,以上case语句都不满足的情况下,执行default内语句
        //语句
}

switch执行的几种情况:

  1. switch语句会对case的条件进行匹配,case条件如果成立执行内部语句后,遇到break直接结束switch语句。

    在这里插入图片描述

  2. 如果case没有匹配值则不会执行任何case语句,最后会执行default语句。
    在这里插入图片描述

  3. 如果case有匹配值,但是没有break语句,程序执行当前匹配的case语句和后续所有的case语句,直到有break或switch结束

    在这里插入图片描述

switch语句作用在整数上,而byte、short、char都可以隐含装换为int,所以这些数据类型是可以的,在JDK7.0版本中对switch做了功能的加强,可以接收String类型,所以String也是可以的,而long、浮点型数据不可以。

对于if elas和switch的选择:如果条件较少建议使用if语句(if语句使用起来更灵活,但是无法精准匹配,需要按顺序依次匹配条件)如果条件较多建议使用switch(可以精准匹配,直接执行匹配的case或default)

3.2.3、switch表达式

在Java12 中引入了 switch表达式作为预览特性,这是对传统 switch 语句的增强,它允许 switch 不仅仅作为语句使用,还可以作为表达式使用,从而可以有返回值。在 Java14 中,switch表达式成为了标准特性。

在 Java 12 之前,switch只能作为语句使用:

int day = 4;
String dayType;

switch (day) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        dayType = "workday 工作日";
        break;
    case 6:
    case 7:
        dayType = "dayOff 休息日";
        break;
    default:
        dayType = "Invalid day";
        break;
}
System.out.println(dayType);

从 Java 12 开始,可以使用switch作为表达式,它允许直接返回一个值:

int day = 4;
String dayType = switch (day) {
    case 1, 2, 3, 4, 5 - > "workday 工作日";
    case 6, 7 - > "dayOff 休息日";
    default - > "Invalid day";
};
System.out.println(dayType);

在这里插入图片描述

在 switch表达式中,可以使用 - >来代替 :,这样就不需要 break语句来阻止代码的进一步执行。每个 case分支都是一个表达式,并且自动包含了 break 语句。

如果 case 分支需要执行更复杂的逻辑,可以使用 yield 关键字来返回一个值:

int day = 4;
String dayType = switch (day) {
    case 1, 2, 3, 4, 5 - > {
        // 复杂的逻辑
        yield "workday 工作日";
    }
    case 6, 7 -> {
        // 复杂的逻辑
        yield "dayOff 休息日";
    }
    default -> {
        // 复杂的逻辑
        yield "Invalid day";
    }
};

System.out.println(dayType);

在这里插入图片描述

在这种情况下,yield用于从 switch表达式的 case块中返回一个值。

  • switch表达式要求所有可能的情况都被覆盖,或者包含一个 default 分支。当使用 switch表达式时,如果没有匹配的 case并且没有 default分支,会抛出 java.lang.SwitchExpressionException
  • 可以用于 int、byte、short、char、String、枚举类型以及从 Java SE 14 开始的 int 包装类和枚举类型的实例。

Java17不仅增加了新的switch的写法,还将原来的switch进行了改进,即便是 case:这种写法,也能支持表达式功能,但是它必须使用 yield 才能将值返回,而且yield 会直接跳出switch,所以使用了yield 后,就不需要break了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辰 羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值