当前位置 博文首页 > Java JDK13(Java 13) switch新特性语法使用及示例代码_weixin_39

    Java JDK13(Java 13) switch新特性语法使用及示例代码_weixin_39

    作者:[db:作者] 时间:2021-07-05 12:59

    1、使用case L ->箭头标签的switch代码

    1)JDK13以前的switch代码switch (day) {

    case MONDAY:

    case FRIDAY:

    case SUNDAY:

    System.out.println(6);

    break;

    case TUESDAY:

    System.out.println(7);

    break;

    case THURSDAY:

    case SATURDAY:

    System.out.println(8);

    break;

    case WEDNESDAY:

    System.out.println(9);

    break;

    }

    2)JDK13新写法switch代码switch (day) {

    case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);

    case TUESDAY -> System.out.println(7);

    case THURSDAY, SATURDAY -> System.out.println(8);

    case WEDNESDAY -> System.out.println(9);

    }

    2、使用case L -> 箭头标签简化的写法

    除了case L :开关模块中的传统标签外,我们还提出了一种带有case L ->标签的简化形式。如果标签匹配,则仅执行箭头右侧的表达式或语句;否则,将不执行任何操作。没有失败。例如,给定以下switch使用新标签形式的语句:static void howMany(int k) {

    switch (k) {

    case 1 -> System.out.println("one");

    case 2 -> System.out.println("two");

    default -> System.out.println("many");

    }

    }

    如下代码:howMany(1);

    howMany(2);

    howMany(3);

    结果如下:one

    two

    many

    3、使用switch表达式

    我们将扩展该switch语句,以便可以将其用作表达式。例如,howMany可以将以前的方法重写为使用switch表达式,因此它仅使用单个println。static void howMany(int k) {

    System.out.println(

    switch (k) {

    case 1 -> "one"

    case 2 -> "two"

    default -> "many"

    }

    );

    }

    在通常情况下,switch表达式将如下所示:T result = switch (arg) {

    case L1 -> e1;

    case L2 -> e2;

    default -> e3;

    };

    4、switch中使用yield返回值

    大多数switch表达式在“ case L ->”开关标签的右侧都有一个表达式。如果需要一个完整的块,我们引入一个新的yield语句来产生一个值,该值成为封闭switch表达式的值。int j = switch (day) {

    case MONDAY -> 0;

    case TUESDAY -> 1;

    default -> {

    int k = day.toString().length();

    int result = f(k);

    yield result;

    }

    };

    这两个语句break带有或不带有标签)和yield便于在switch语句和switch表达式之间消除歧义:switch语句而不是switch表达式可以成为break语句的目标;和switch表达,但不是一个switch语句可以是一个目标yield的语句。

    switch表达式必须以一个值正常完成,或者必须通过引发异常来突然完成。int i = switch (day) {

    case MONDAY -> {

    System.out.println("Monday");

    // ERROR! Block doesn't contain a yield statement

    }

    default -> 1;

    };

    i = switch (day) {

    case MONDAY, TUESDAY, WEDNESDAY:

    yield 0;

    default:

    System.out.println("Second half of the week");

    // ERROR! Group doesn't contain a yield statement

    };

    控制语句,break,yield,return和continue,无法通过跳switch表达式,如在以下内容:for (int i = 0; i < MAX_VALUE; ++i) {

    int k = switch (e) {

    case 0:

    yield 1;

    case 1:

    yield 2;

    default:

    continue z;

    // ERROR! Illegal jump through a switch expression

    };

    ...

    }

    cs