java中switch条件语句的用法、switch的三种语法、switch支持的参数类型

2024-04-28 15:44

本文主要是介绍java中switch条件语句的用法、switch的三种语法、switch支持的参数类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、switch的应用场景
  • 二、switch三种语法
    • 2.1、switch 标准方式
    • 2.2、switch - > 用法
    • 2.2、switch yield 用法
  • 三、什么是case穿透?
  • 四、示例
    • 4.1、标准示例
    • 4.2、错误示例
    • 4.3、引申用法(多条件合并)

一、switch的应用场景

在分支结构中,我们除了使用if-else或者是if-else if之外,当分支量过大的时候,我们即可选择使用switch语句进行选择
在这里插入图片描述

二、switch三种语法

Java中switch的三种用法详解:

  • switch 标准方式
  • switch - > 用法
  • switch yield 用法

2.1、switch 标准方式

语法:

switch (表达式) {case 值1:// 执行语句块1break;case 值2:// 执行语句块2break;...case 值N:// 执行语句块Nbreak;default:// 如果以上所有case都不匹配,执行默认语句块
}

case语句中指定的每个值必须具有与表达式兼容的类型。switch语句的执行顺序是,首先计算表达式的值,然后将该值与每个case的值进行比较,如果找到匹配的case,则执行该case下的语句,直到遇到break语句或switch语句结束。如果没有找到匹配的case,且存在default子句,则执行default子句中的语句。如果没有匹配的case且没有default子句,程序将不执行任何操作。

注意:若表达式的值与case后面的值匹配则会执行该case下的语句,但是若该case下没有break,则会一直往下执行,直到遇到break语句或switch语句结束

注意
1.表达式支持的参数类型:
JDK1.0-1.4 数据类型接受 byte、short、int、char

JDK1.5 数据类型接受 byte、short、int、char、enum(枚举)、(包装类型Character、Byte、Short、Integer)

JDK1.7 数据类型接受 byte、short、int、char、enum(枚举)、包装类型、String 六种类型

(1)对四个包装类的支持是因为java编译器在底层手动进行拆箱。
(2)而对枚举类的支持是因为枚举类有一个ordinal方法,该方法实际上是一个int类型的数值。
(3)jdk1.7开始支持String类型,但实际上String类型有一个hashCode算法,结果也是int类型。
(4)而byte short char类型可以在不损失精度的情况下向上转型成int类型.所以总的来说,可以认为switch中只支持int类型。

float、double都不能用于switch语句。

2.default 子句是可选的,当没有匹配的 case 时,执行default
3.break语句用来在执行完一个 case 分支后使程序跳出 switch 语句块;如果没有写 break,程序会顺序执行到 switch 结尾,除非遇到break。

2.2、switch - > 用法

jdk12开始switch语法支持函数式接口和lambda表达式

使用switch标准方式编写代码太多的break造成代码冗余可读性不高 可以借助函数式接口和lambda表达式简化书写

代码如下:

switch (表达式) {case 值1 -> 执行语句块1;case 值2 -> 执行语句块2;......case 值N -> 执行语句块N;	default:// 如果以上所有case都不匹配,执行默认语句块
}

使用 - > 方法更加简单, ->的用法其实只是相当于不用输入break就可以跳出判断, 保证其只有一条分支可走.

示例:

int dayOfWeek = 2;
switch (dayOfWeek) {case 1 -> System.out.println("星期一");case 2 -> System.out.println("星期二");case 3 -> System.out.println("星期三");case 4 -> System.out.println("星期四");case 5 -> System.out.println("星期五");case 6 -> System.out.println("星期六");default -> System.out.println("星期日");
}

输出结果为:

星期二

jdk12之后还可以多条件合并

int dayOfWeek = 2;
switch (dayOfWeek) {case 1,2,3,4,5 -> System.out.println("工作日");default -> System.out.println("其他");
}

2.2、switch yield 用法

jdk14新特性,增加了yield用法

int numLetters = switch(seasonName){case "Spring" ->{System.out.println("spring time");yield 6;}case "Summer","Winter" -> 6; //可以使用yield关键字,也可以省略case "Fall" -> 4;default -> -1;
};

这里来说, switch 作为了 一条语句, 所以末尾要加冒号, 其他用法相同

示例:

int dayOfWeek = 2;
String weekday = switch (dayOfWeek) {case 1:yield "星期一";case 2:yield "星期二";case 3:yield "星期三";case 4:yield "星期四";case 5:yield "星期五";case 6:yield "星期六";default:yield "星期日";
};
System.out.println(weekday);

三、什么是case穿透?

在java的switch非简化语句中,当匹配到的case中没加break;的时候,那就会执行当前case里面的语句,以及这个switch语句中当前case下面的所有case中或者是default中的语句。直到遇到break;为止

以下是有关case穿透的实验代码:

public static void main(String[] args) {String date = "周二";switch(date){case "周一":System.out.println("周一");case "周二":System.out.println("周二");case "周三":System.out.println("周三");default:System.out.println("其他");}
}

输出周二、周三、其他

四、示例

4.1、标准示例

public static void main(String[] args) {String date = "周一";switch(date){case "周一":System.out.println("工作日");break;case "周二":System.out.println("工作日");break;case "周三":System.out.println("工作日");break;default:System.out.println("其他");break;}
}

4.2、错误示例

由于switch语句中整体都没加break, 所以语句会在遇到第一个符合的case开始执行,直到遇到break或switch语句结束

public static void main(String[] args) {String date = "周二";switch(date){case "周一":System.out.println("周一");case "周二":System.out.println("周二");case "周三":System.out.println("周三");default:System.out.println("其他");}
}

输出周二、周三、其他
在这里插入图片描述

4.3、引申用法(多条件合并)

上面写的案例感觉很多逻辑重复的,能否多个条件合并在一起呢?当然是可以的

方式一:

public static void main(String[] args) {String date = "周一";switch(date){case "周一":case "周二":case "周三":System.out.println("工作日");break;default:System.out.println("其他");break;}
}

由于case "周一"后面没有跟break;所以会一直走下去,直到遇到break。因此可以利用这种方式实现少些代码。

方式二:java14引入

注意:此种方式需要jdk版本是jdk14及以上

public static void main(String[] args) {String date = "周一";switch(date){case "周一","周二","周三":System.out.println("工作日");break;default:System.out.println("其他");break;}
}

这篇关于java中switch条件语句的用法、switch的三种语法、switch支持的参数类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/943636

相关文章

Spring AI默认gpt版本源码探究

Spring AI默认gpt版本源码探究 调试代码 通过调试,可以看到默认mdel为gpt-3.5-turbo 源码探究 进入OpenAiChatClient类查看具体的代码信息 可以看到如下代码,在有参构造方法中可以看到,model默认使用OpenAiApi.DEFAULT_CHAT_MODELpublic class OpenAiChatClient extends Abstract

Devexpress的Image Picker的用法

一个好的界面离不开图标的润色,WPF是分辨率无关的,所以最好使用矢量图,而非png,jgp之类的图片,否则在不同的分辨率下,体验会不好。 1.打开Devexpress的imagepicker,点击VS的工具栏的按钮:扩展->DevExpress->WPF Controls V19.2.7->Run Image Picker,如下图:   2.打开之后如图所示: 3.选好需要的图标,

java 程序 无法重启 windows server2003 ADSL

查看网络连接: 右键ADSL -> 属性 - > 选项:去掉断线重连的选项。 重启网卡 注意: 如果adsl卡死,断不开,就打开任务管理器、结束adsl网卡进程。

redis参数说明备份

  daemonize:  默认情况下,redis不是在后台运行的,如果需要在后台运行,把该项的值更改为yes    pidfile  当 Redis 在后台运行的时候,Redis 默认会把 pid 文件放在/var/run/redis.pid,你可以配置到其他地址。当运行多个 redis服务时,需要指定不同的pid文件和端口    bind  指定Redis只接收来自于该 I

Spring框架Bean的作用域是单例还是多例?如何修改成多例

Spring 默认创建单例 Bean 在 Spring Boot 中,你可以使用 YAML 配置文件(.yml 或 .yaml 扩展名)来定义 Bean 的作用域。要将一个 Bean 配置为多例(prototype)作用域,你需要使用 application.yml 文件,并按照以下格式进行配置: spring:beans:myPrototypeBean:class: com.example

SpringBoot+MybatisPlus实现读写分离,自动切换数据源

读写分离有必要吗? 实现读写分离势必要与你所做的项目相关,如果项目读多写少,那就可以设置读写分离,让“读”可以更快,因为你可以把你的“读”数据库的innodb设置为MyISAM引擎,让MySQL处理速度更快。 实现读写分离的步骤 监听MybatisPlus接口,判断是写入还是读取 在这里我使用的是AOP的方式,动态监听MybatisPlus中Mapper的方法。 import com.s

java操作excel2010时无法找到WorkbookFactory类

最近在读取Excel的时候发现无法读取2010版本的, 于是找到了支持多个版本的: Workbook workbook = WorkbookFactory.create(is); 下载了新版本的poi包poi-3.9 发现找不到WorkbookFactory这个类 最后发现这个类存在于:poi-ooxml-3.9.jar中 所以以后再做的这个操作时要下下载两个包: poi-3.9.

Java Math floor round ceil 函数

有道Java相关的题,给大家分享一下: 1. System.out.println(Math.floor(-2.1)); 词句打印会是什么结果? [java]  view plain copy class Test {       public static void main(String[] args) {           System.out.println

mysql sql语句 update 加法运算

UPDATE  table SET column = column+ num;

【JAVA进阶篇教学】第十六篇:Java中AOP使用

博主打算从0-1讲解下java进阶篇教学,今天教学第十五篇:Java中AOP使用。 AOP(Aspect-Oriented Programming)是一种编程范式,它允许开发者在不修改源代码的情况下,对代码进行横切关注点的分离和增强。在 Java 中,AOP 通常通过使用 Spring Framework 或 AspectJ 等框架来实现。 在这篇博客中,我们将介绍 AOP 的基本概念、使用