JDK14的新特性-Switch新功能

2020年3月17日,Oracle正式发布了JDK14版本,共新增了16项新特性

本文重点写一下关于switch的新功能:

switch 表达式扩展了 switch 语句,使其不仅可以作为语句(statement),还可以作为表达式(expression),并且两种写法都可以使用传统的 switch 语法,或者使用简化的“case L ->”模式匹配语法作用于不同范围并控制执行流。

JDK14之前的switch写法:

public class SwitchTest {
    public static void main(String[] args) {
        Weekday day = Weekday.MON; //初始化一个枚举变量
        //case L:标签具有贯穿功能
        switch (day){
            case MON:
            case TUE:
            case WEN:
                String s = ""; //这个标签中定义的局部变量在整个switch全部有效 再定义会报错:重复定义
                System.out.println("上半周");
                break;
            case THU:
            case FRI:
                String s = ""; //重复定义报错
                System.out.println("下半周");
            case SAT:
            case SUN:
                System.out.println("周末");
        }
        System.out.println("12");

}
//定义枚举
enum Weekday{
    MON,TUE,WEN,THU,FRI,SAT,SUN
}
运行结果:
上半周12
传统写法需要使用break来避免case贯穿
 
1.case L -> 标签取消了贯穿功能 case后面的常量可以使用逗号来分割多个常量
看下代码
public class SwitchTest {
    public static void main(String[] args) {
        Weekday day = Weekday.MON; //初始化一个枚举变量
        //case L:标签具有贯穿功能
        switch (day){//不需要break;
            case MON, TUE, WEN -> {
                System.out.println("上半周");
                String s = "abc"; //局部变量只在当前代码块有效
            }
            case THU, FRI      -> {
                System.out.println("下半周");
                String s = "def";
            }
            case SAT, SUN      -> {
                System.out.println("周末");
            }
        }
        System.out.println("12");
}

//定义枚举
enum Weekday{
    MON,TUE,WEN,THU,FRI,SAT,SUN
}
运行结果:
上半周12

2.JDK14中扩展了switch可以作为表达式进行赋值或打印操作
 
public class SwitchTest {
    public static void main(String[] args) {
        Weekday day = Weekday.MON; //初始化一个枚举变量

        //JDK14中扩展了switch可以作为表达式
        //将表达式的值打印出来
        System.out.println(switch(day){
            case MON, TUE, WEN -> "上半周";
            case THU, FRI      -> "下半周";
            case SAT, SUN      -> "周末";
        });

        //将表达式的值赋值给一个变量
        String text = switch(day){
            case MON, TUE, WEN -> "上半周";
            case THU, FRI      -> "下半周";
            case SAT, SUN      -> "周末";
        };

        //通过yield产生一个新的值
        day = Weekday.SAT;
        int x = switch(day){
            case MON, TUE, WEN -> 1;
            case THU, FRI      -> 2;
            case SAT, SUN      -> {
                int rnd = (int)(Math.random()*10);  //生成一个(0,10)内的随机整数
                System.out.println("rnd = " + rnd);
                yield rnd;  //通过yield产生一个新的值
            };
        };

        System.out.println("x = " + x);
    }
}

//定义枚举
enum Weekday{
    MON,TUE,WEN,THU,FRI,SAT,SUN
}

原文地址:https://www.cnblogs.com/seizedays/p/12584135.html

时间: 2024-10-07 14:13:06

JDK14的新特性-Switch新功能的相关文章

详解Tomcat 7的七大新特性和新增功能

Apache发布首个Tomcat 7版本已经发布了有一段时间了,Tomcat 7引入了许多新功能,并对现有功能进行了增强.很多文章列出了Tomcat 7的新功能,但大多数并没有详细解释它们,或指出它们的不足,或提供代码示例.本文将明确描述Tomcat 7中七个最显著的特征和新增的功能,并对其作出评论,而不是仅仅列出新的功能.本文还提供了代码例子以方便你可以对其有更好的理解. 本文分为两个部分,分别是"Tomcat 7的新特性"和"Tomcat 7增强的功能". To

RHEL7新特性及RHEL6功能对比

一.RHEL7新特性对比之安装 2012,发布rhel7(主要是64位系统) 1.RHEL7目前支持架构: ①64-bit AMD    ②64-bit Intel    ③IBM POWER    ④IBM System z    ⑤不再支持x86 32bit 2.RHEL7安装界面-->grub2,systemd ①全新的安装界面    ②一站式的安装配置    ③全新的kickstart结构    ④全新的分区工具 ⑤支持2TB以上硬盘作为系统引导盘    ⑥安装配置步骤较大变化 3.RH

详解Tomcat 7的七大新特性和新增功能(1)

http://developer.51cto.com/art/201009/228537.htm http://tomcat.apache.org/tomcat-7.0-doc/index.html Apache发布首个Tomcat 7版本已经发布了有一段时间了,Tomcat 7引入了许多新功能,并对现有功能进行了增强.很多文章列出了Tomcat 7的新功能,但大多数并没有详细解释它们,或指出它们的不足,或提供代码示例.本文将明确描述Tomcat 7中七个最显著的特征和新增的功能,并对其作出评论

PHP 5.6正式发布:新特性、及功能改进介绍

经过了长时间的开发测试,新版本PHP程序(PHP5.6正式版)终于发布了.新版本中加入了一些实用的新特性,也摒弃了一些冗余的功能.同时,也对部分原有功能进行了改进.下面就一起看看PHP 5.6正式版到底有何不同之处吧! 新版本在旧版基础上做出的改进 PHP 5.6中对旧版本PHP做出了不少改进.不过,大部分PHP5代码在新版本PHP中都是不需要修改也可以正常运行的. json_decode函数 根据JSON的规范,json_decode()函数会自动排除JSON文本中所有非小写变量(比如:tru

JDK7的新特性——switch语句可以用字符串语句

1 //jdk7.0中switch可以使用字符串做条件 2 public class TestSwitch02 { 3 public static void main(String[] args){ 4 String a = "向良峰"; 5 6 switch(a){//JDK 7的新特性,表达式可以是字符串! 7 case "哔哩哔哩": 8 System.out.println("输入的是哔哩哔哩"); 9 break; 10 case &q

Java12新特性 -- switch表达式

传统switch表达式的弊端: 匹配是自上而下的,如果忘记写break, 后面的case语句不论匹配与否都会执行: 所有的case语句共用一个块范围,在不同的case语句定义的变量名不能重复: 不能在一个case里写多个执行结果一致的条件: 整个switch不能作为表达式返回值: java 12 switch新特性: 使用 Java 12 中 Switch 表达式的写法,省去了 break 语句,避免了因少写 break 而出错. 同时将多个 case 合并到一行,显得简洁.清晰也更加优雅的表达

Oracle12c 新特性之三——管理功能的增强

1.    数据文件在线重命名和迁移 不想先前的版本,在Oracle12cR1中,数据文件的迁移或重命名不再要求一系列的步骤,例如:将表空间至于只读模式,然后数据文件逻辑等操作.在12cR1中,数据文件能通过SQL语句"ALTERDATABASE MOVE DATAFILE"很容易的在线完成.在移动数据文件的过程中,用户可以执行查询,DML和DDL任务.另外,数据文件能在存储间迁移,例如:从非ASM到ASM,反之亦然. 1.1.   重命名数据文件: SQL> ALTER DAT

Kubernetes1.3新特性:新的资源回收控制器

(一)  核心概念 在kubernetes1.3中新增了一个资源回收控制器GarbaseCollector,用这个控制器来替代kubernetes1.3中的资源回收控制器GC. 如下为kubernetes1.2中的资源回收控制器结构体: 如下为kubernetes1.3中的资源回收控制器结构体: 在kubernetes1.2中,如果要实现对资源级联回收功能,需要通过客户端进行资源级联回收调用的方式实现,比如存在一个replica set类型的资源,在这个资源下面存在多个POD资源,如果我们使用命

HTML5 的新特性以及新标签的浏览器兼容问题

新特性: HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加. 1)  拖拽释放(Drag and drop) API 2)  语义化更好的内容标签(header,nav,footer,aside,article,section) 3)  音频.视频API(audio,video) 4)  画布(Canvas) API 5)  地理(Geolocation) API 6)  本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失: 7