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(""); }
//定义枚举
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("");
} //定义枚举
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
}

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

  1. JDK1.8之后的新特性和新接口

    接口的旧特性: 就特性下接口中只有: 常量(必须赋值) 抽象方法abstract(和final static private三个关键字冲突) interface Inter { //int a ; / ...

  2. JDK1.8新特性——使用新的方式遍历集合

    JDK1.8新特性——使用新的方式遍历集合 摘要:本文主要学习了在JDK1.8中新增的遍历集合的方式. 遍历List 方法: default void forEach(Consumer<? su ...

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

    经过了长时间的开发测试,新版本PHP程序(PHP5.6正式版)终于发布了.新版本中加入了一些实用的新特性,也摒弃了一些冗余的功能.同时,也对部分原有功能进行了改进.下面就一起看看PHP 5.6正式版到 ...

  4. hadoop3.0新特性及新功能

    Hadoop-3.0.0-alpha2版本发布,相比之前的hadoop-2.x有一系列的功能增强.但目前还是个alpha版本,有很多bug,且不能保证API的稳定和质量. 主要变化 Java最低版本要 ...

  5. Java12新特性 -- switch表达式

    传统switch表达式的弊端: 匹配是自上而下的,如果忘记写break, 后面的case语句不论匹配与否都会执行: 所有的case语句共用一个块范围,在不同的case语句定义的变量名不能重复: 不能在 ...

  6. Oracle12c功能增强 新特性之管理功能的增强

    1.    数据文件在线重命名和迁移 不想先前的版本号.在Oracle12cR1中,数据文件的迁移或重命名不再要求一系列的步骤,比如:将表空间至于仅仅读模式,然后数据文件逻辑等操作.在12cR1中.数 ...

  7. Firefox 23中的新特性(新陷阱)

    话说有一天突然发现我们的网站页面上的JQuery功能都失效了,Firebug中显示如下的错误 Blocked loading mixed active content "http://xxx ...

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

    新特性: HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加. 1)  拖拽释放(Drag and drop) API 2)  语义化更好的内容标签(heade ...

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

    (一)  核心概念 在kubernetes1.3中新增了一个资源回收控制器GarbaseCollector,用这个控制器来替代kubernetes1.3中的资源回收控制器GC. 如下为kubernet ...

随机推荐

  1. springboot oauth 鉴权之——授权码authorization_code鉴权

    近期一直在研究鉴权方面的各种案例,这几天有空,写一波总结及经验. 第一步:什么是 OAuth鉴权 OAuth2是工业标准的授权协议.OAuth2取代了在2006创建的原始OAuthTM协议所做的工作. ...

  2. TCP与三次握手

    TCP是在不可靠的网络层上提供可靠的传输服务.如何理解?假设你拥有一个快递公司,但是快递小哥不是很靠谱, 送货偶尔会出问题,所以你经常收到投诉电话,处理一些复杂的问题.比如有些快递压舱了,有些丢失了, ...

  3. 微软亚洲研究院开源图数据查询语言LIKQ

    ​ 近日,微软亚洲研究院通过GitHub 平台开源图数据查询语言LIKQ (Language-Integrated Knowledge Query).LIKQ是基于分布式大规模图数据处理引擎Graph ...

  4. 微信小程序app.js中设置公有变量

    初始化GlobalData 在App.js的最上方可以设置GlobalData的初始值. App({ globalData:{ appid: '1wqas2342dasaqwe232342xxxxxx ...

  5. python爬虫之浅析验证码

    一.什么是验证码? 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”( ...

  6. volatile和synchronized到底啥区别?多图文讲解告诉你

    你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it well enough ...

  7. jquery-购物车js

    购物车示例js,为了方便参考,页面写的比较简单.示例如下图所示: html代码如下: <!doctype html> <html lang="en"> &l ...

  8. overflow-y:auto/hidden/scroll和overflow-x:visible组合渲染异常

    最近做项目想做一个这样的效果:就是我想要内部div x轴溢出div则显示y轴溢出div则出现滚动条于是用到了overflow-y 和 overflow-x 这个css属性原来以为css中直接设置就ok ...

  9. 逐行分析jQuery2.0.3源码-完整笔记

    概览 (function (){ (21 , 94) 定义了一些变量和函数 jQuery=function(); (96 , 293) 给jQuery对象添加一些方法和属性; (285 , 347) ...

  10. LVM简介及CentOS7 LVM操作实战

    LVM简介LVM是逻辑盘卷管理(LogicalVolumeManager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和 分区之上的一个逻辑层,来提高磁盘分区管理的灵活 ...