java基础概念07-switch语句

一、switch定义 

二、基本语法

switch (expression) {  
    case value1:  
        // 当expression的值等于value1时执行的代码  
        break; // 可选  
    case value2:  
        // 当expression的值等于value2时执行的代码  
        break; // 可选  
    // 你可以有任意数量的case语句  
    default: // 可选  
        // 当没有case匹配时执行的代码  
}
  • expression:这是被评估的表达式,其结果必须与case标签后面的值进行比较。从Java 7开始,switch语句的表达式可以是String类型,或其他枚举类型,但在此之前,它只能是:byte、short、char、int、Character、Byte、Short、Integer、String(Java 7及以上版本)、Enum(Java 5及以上版本)的包装类或这些类型的表达式。
  • break省略:导致case穿透!!!

2-1、case穿透

就是语句体中没有写break导致的。

执行流程:

首先还是会拿着小括号中表达式的值跟下面每一个case进行匹配。如果匹配上了,就会执行对应的语句体,如果此时发现了break,那么结束整个switch语句。如果没有发现break,那么程序会继续执行下一个case的语句体,一直遇到break或者右大括号为止。 

使用场景:

如果多个case语句重复了,可以使用case穿透简化代码。

三、switch表达式(新特性)

3-1、简化写法

3-2、预览功能

从Java 12开始,Java引入了switch表达式作为预览功能(Preview Feature)。switch表达式与传统的switch语句不同,它必须返回一个值,并且其语法更加紧凑和灵活。

 

1、基本语法

<Type> result = switch (expression) {  
    case value1 -> {  
        // 当expression的值等于value1时执行的代码,并返回结果  
        // 可以是单一表达式或代码块  
    }  
    case value2 -> result2; // 单一表达式  
    // 可以有多个case  
    default -> {  
        // 当没有case匹配时执行的代码,并返回结果  
        // 可以是单一表达式或代码块  
    }  
};
  • <Type>switch表达式必须返回的类型。
  • ->符号用于分隔每个case的条件和该条件满足时要执行(并返回)的表达式或代码块。
  • 如果case后面跟的是代码块(即使用大括号{}包围的代码),则代码块内的最后一条语句(或显式返回语句)的结果将作为该case的返回值。
  • 如果没有default分支,且没有case匹配,则编译时会报错(除非使用了yield关键字,这是后续版本中的增强)。
  • case中可以不写break,不会有穿透现象

示例:

String dayOfWeek = switch (day) {  
    case MONDAY, FRIDAY, SUNDAY -> "Weekend vibes";  
    case TUESDAY -> "Midweek struggles";  
    case THURSDAY -> "Almost there!";  
    case WEDNESDAY, SATURDAY -> {  
        // 使用代码块进行更复杂的操作  
        System.out.println("Special day!");  
        yield "Special treatment";  
    }  
    default -> "Unknown day";  
};  
  
System.out.println(dayOfWeek);

注意:上面的yield关键字是Java 14中引入的,用于在switch表达式的代码块中显式地提供返回值。

在Java 12和13中,如果你需要在case的代码块中返回值,你必须使用返回语句(如return),但这通常意味着switch表达式需要嵌套在一个更大的方法中,因为switch表达式本身不能包含返回语句(除非它是方法的一部分)。

四、switch vs if

  • if:一般用于对范围的判断;
  • switch:把有限个数据一一列举出来,让我们任选其一。

五、练习题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值