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. linux查看端口号占用命令-netstat

    题记 经常会发现,很多时候我们在运行一些带有端口的程序时,程序经常会报端口被占用的问题,比如Tomcat 8080,端口起不来. 查看端口号 netstat 如果发现某个端口被占用后,可以用命令查看, ...

  2. React Native 学习笔记--进阶(二)--动画

    React Native 进阶(二)–动画 动画 流畅.有意义的动画对于移动应用用户体验来说是非常必要的.我们可以联合使用两个互补的系统:用于全局的布局动画LayoutAnimation,和用于创建更 ...

  3. SQL语句中in not in exits not exits用法比较

    exists (sql 如果返回结果集为真) not exists (sql 如果没有返回结果集为真) 如下: 表A ID NAME 1 A1 2 A2 3 A3 表B ID AID NAME 1 1 ...

  4. python 生成随机数、生成 uuid

    1. 使用 uuid.uuid1 产生一个随机数 2. 在使用 random.sample() 产生一个随机字符串 3. 将两者进行拼接 import uuid import random def r ...

  5. 【阿里云IoT+YF3300】16.云端一体化,天猫精灵操控YF3300

    “你好天猫精灵”,“主人有什么吩咐”,“打开灯”,“好的,灯已打开”.对于这样的对话应该大多数人都很熟悉,这就是智能家居的缩影.对于现在市面上层出不穷的智能家居系统,功能越来越繁杂,可是因为开发难度高 ...

  6. Javascript学习笔记-基本概念-语法、关键字和保留字、变量

    语法 1.区分大小写 2.标识符 所谓标识符,就是指变量.函数.属性的名字,或者函数的参数. 命名规则: 第一个字符必须是一个字母.下划线(_)或一个美元符号($): 其他字符可以是字母.下划线.美元 ...

  7. 随手撸一个简单的带检查的printf

    #include <stdio.h> #include <iostream> #include <vector> #include <string> # ...

  8. Hibernate入门之注解@Column详解

    前言 上一节我们讲解了Hibernate的主键生成策略,本节我们继续来讲讲Hibernate中针对列的映射即@Column注解,文中若有错误之处,还望指正. @Column注解详解 我们看到如上针对列 ...

  9. Web网页布局的主要方式

    一.静态布局(static layout) 即传统Web设计,网页上的所有元素的尺寸一律使用px作为单位. 1.布局特点 不管浏览器尺寸具体是多少,网页布局始终按照最初写代码时的布局来显示.常规的pc ...

  10. LeetCode37 使用回溯算法实现解数独,详解剪枝优化

    本文始发于个人公众号:TechFlow,原创不易,求个关注 数独是一个老少咸宜的益智游戏,一直有很多拥趸.但是有没有想过,数独游戏是怎么创造出来的呢?当然我们可以每一关都人工设置,但是显然这工作量非常 ...