Java7到Java17之Switch语句进化史示例详解

 更新时间:2023年01月17日 14:58:07   作者:JAVA旭阳  
这篇文章主要为大家介绍了Java7到Java17之Switch语句进化史示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

自 Java 7 以来,java 中的 switch 语句经历了快速发展。因此,在本文中,我们将通过示例讨论 switch 语句从 java 7 到 java 17 的演变或变化。

Java 7

在 Java 7 之前,switch case 中只能使用整数,这个语法持续了很长的一段时间。

int value = 5;
switch (value) {
    case 1:
        System.out.println("One");
        break;
    case 5:
        System.out.println("five");
        break;
    default:
        System.out.println("Unknown");
}

Java 8

在 Java 8 中,switch语句中的case部分支持字符串和枚举。

字符串case例子

String day = "Tuesday";
switch (day) {
    case "Monday":
        System.out.println("Week day");
        break;
    case "Tuesday":
        System.out.println("Week day");
        break;
    case "Wednesday":
        System.out.println("Week day");
        break;
    case "Thursday":
        System.out.println("Week day");
        break;
    case "Friday":
        System.out.println("Week day");
        break;
    case "Saturday":
        System.out.println("Weekend");
        break;
    case "Sunday":
        System.out.println("Weekend");
        break;
    default:
        System.out.println("Unknown");
}

枚举case例子

enum DAYS {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
DAYS days = DAYS.SUNDAY;
switch (days) {
    case MONDAY:
        System.out.println("Weekdays");
        break;
    case TUESDAY:
        System.out.println("Weekdays");
        break;
    case WEDNESDAY:
        System.out.println("Weekdays");
        break;
    case THURSDAY:
        System.out.println("Weekdays");
        break;
    case FRIDAY:
        System.out.println("Weekdays");
        break;
    case SATURDAY:
        System.out.println("Weekends");
        break;
    case SUNDAY:
        System.out.println("Weekends");
        break;
    default:
        System.out.println("Unknown");
}

Java 12

Java 12 中进一步增强了 switch 语句,并引入了 switch 表达式作为预览功能。

  • 您可以从 switch 块中返回值,因此 switch 语句成为switch 表达式
  • 您可以在一个case中有多个值
  • 您可以通过箭头运算符从 switch 表达式返回值
  • 通过 break 关键字返回值

通过 break 关键字返回值例子

return  switch (day) {
    case "Monday":
        break "Weekday";
    case "Tuesday":
        break "Weekday";
    case "Wednesday":
        break "Weekday";
    case "Thursday":
        break "Weekday";
    case "Friday":
        break "Weekday";
    case "Saturday":
        break "Weekend";
    case "Sunday":
        break "Weekend";
    default:
        break "Unknown";
};

通过箭头运算符返回值

return  switch (day) {
            case "Monday"-> "Week day";
            case "Tuesday"-> "Week day";
            case "Wednesday"->"Week day";
            case "Thursday"->"Week day";
            case "Friday"->"Week day";
            case "Saturday"-> "Weekend";
            case "Sunday"-> "Weekend";
            default->"Unknown";
        };

case中多个值的例子

同样 Java 12 可以在单个 case 语句中提供多个 case 值,如下所示

return  switch (day) {
            case "Monday","Tuesday","Wednesday","Thursday","Friday"
-> "Week day";
            case "Saturday", "Sunday" -> "Weekend";
            default->"Unknown";
        };

Java 13

上面通过break关键字返回值,在 Java 13 中被“yield”关键字取代。

return  switch (day) {
    case "Monday":
        yield  "Weekday";
    case "Tuesday":
        yield "Weekday";
    case "Wednesday":
        yield "Weekday";
    case "Thursday":
        yield "Weekday";
    case "Friday":
        yield "Weekday";
    case "Saturday":
        yield "Weekend";
    case "Sunday":
        yield "Weekend";
    default:
        yield "Unknown";
};

Java 14

到目前为止,我们在 Java 12 和 13 中讨论的 switch 语句和功能都是预览功能,通过标记参数 –enable-preview=true 开启功能 。

但是 Java 14 只是将所有功能从预览功能变成了标准功能,无需设置标志 –enable-preview=true也能使用上面所说的方式。

Java 17

Java 17 LTS 是 Java SE 平台的最新长期支持版本,发布于2021年9月15日,又增强了switch的功能。

  • 模式匹配

您可以在 switch 条件下传递对象,并且可以在 switch case 标签中检查该对象的不同类型,如下面的例子:

return switch (obj) {
    case Integer i -> "It is an integer";
    case String s -> "It is a string";
    case Employee s -> "It is a Employee";
     default -> "It is none of the known data types";
};

在上面的示例中,我将一个对象传递给切换条件,这在 Java 17 之前是不可能的。然后可以检查该对象的特定数据类型并将其分配给变量。

例如case Integer i- > "It is an integer";表示检查传递的对象是否为“Integer”类型,如果它是整数,则将其分配给变量“i”。并通过箭头运算符返回字符串“It is an integer”。

  • 保护模式

让我们来看看这个用例。

在我检查了“Employee”实例的案例标签内,我想进行额外的检查。

通常你会像下面这么做:

case Employee emp:
	if(emp.getDept().equals("IT")) {
		yield "This is IT Employee";
	}

但是 Java 17 引入了“保护模式”, 你可以修改成下面的方式:

return switch (obj) {
    case Integer i -> "It is an integer";
    case String s -> "It is a string";
    case Employee employee && employee.getDept().equals("IT") -> "IT Employee";
    default -> "It is none of the known data types";
};
  • 空值处理

在 Java 17 之前,您永远无法将 null 值传递给 switch 语句,而不会抛出 Null 指针异常,Java 17 允许你这样处理,比如下面的方式:

case null -> "It is a null object";

如果你有上面的 switch 表达式,如果你传递的对象是空的,你将永远不会得到空指针异常。

总结

上面就是从 Java 7 到 Java 17 switch case 的进化史,虽然没大用,大家就了解了解吧。

以上就是Java7到Java17之Switch语句进化史示例详解的详细内容,更多关于Java7到Java17Switch语句的资料请关注脚本之家其它相关文章!

相关文章

  • 使用Java把文本内容转换成网页的实现方法分享

    使用Java把文本内容转换成网页的实现方法分享

    这篇文章主要介绍了使用Java把文本内容转换成网页的实现方法分享,利用到了Java中的文件io包,需要的朋友可以参考下
    2015-11-11
  • 浅谈JDK、JRE、JVM三者之间的关系

    浅谈JDK、JRE、JVM三者之间的关系

    本文主要介绍了浅谈JDK、JRE、JVM三者之间的关系,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • java使用FuncGPT慧函数对Mybatis进行一对一查询映射处理

    java使用FuncGPT慧函数对Mybatis进行一对一查询映射处理

    这篇文章主要介绍了java使用FuncGPT慧函数对Mybatis进行一对一查询映射处理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • SpringBoot整合jasypt加密配置文件敏感信息

    SpringBoot整合jasypt加密配置文件敏感信息

    在项目中我们需要对配置文件的一些敏感信息进行加密处理,比如数据库账户密码,避免直接暴露出来,这种场景常常用于生产环境,我们不想让开发人员知道生产库的密码,有运维人员统一管理,所以本文给大家介绍了SpringBoot整合jasypt加密配置文件敏感信息
    2024-06-06
  • IDEA 显示Run Dashboard窗口的2种方式(推荐)

    IDEA 显示Run Dashboard窗口的2种方式(推荐)

    这篇文章主要介绍了IDEA 显示Run Dashboard窗口的2种方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Java实现的Base64加密算法示例

    Java实现的Base64加密算法示例

    这篇文章主要介绍了Java实现的Base64加密算法,结合实例形式分析了Java实现的base64编码转换相关使用方法及操作注意事项,需要的朋友可以参考下
    2018-04-04
  • Java实现插入排序算法可视化的示例代码

    Java实现插入排序算法可视化的示例代码

    插入排序的算法描述是一种简单直观的排序算法。其原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。本文将用Java语言实现插入排序算法并进行可视化,感兴趣的可以了解一下
    2022-08-08
  • SpringCloud中的路由网关鉴权熔断详解

    SpringCloud中的路由网关鉴权熔断详解

    这篇文章主要介绍了SpringCloud中的路由网关鉴权熔断详解,Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,需要的朋友可以参考下
    2024-01-01
  • MyBatis核心源码深度剖析SQL语句执行过程

    MyBatis核心源码深度剖析SQL语句执行过程

    这篇文章主要介绍了MyBatis核心源码深度剖析SQL执行过程,mybatis执行SQL的流程都是根据statement字符串从configuration中获取对应的mappedStatement,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2022-05-05
  • 一文带你搞懂Java中i++ 和 ++i的区别

    一文带你搞懂Java中i++ 和 ++i的区别

    在Java中,i++和++i都用于递增变量i的值,但它们之间有一个细微的区别,i++是后缀递增操作符,++i是前缀递增操作符,在大多数情况下,这两种递增操作的结果都是一样的,但在某些特定的表达式和逻辑中,它们可能会产生不同的效果,本文将带大家搞清Java中i++ 和 ++i的区别
    2023-09-09

最新评论