java 14引入的一种新switch句式

概述

《java核心技术》一书中对新switch和旧版switch的形容是非直通和直通式,旧的switch大家都知道,如果没有break语句就会一直执行后续的case语句,就像是一直往下通一样;而新版的switch则不需要break语句,只会执行其中一个分支。

而这种switch在使用规范上更加严格,也有很多新特性,例如switch语句的返回值。

特性

1.java 12中对switch语句引入了具有返回值的形式,这种形式可以也必须使用yield去返回一个值,并让switch语句可以返回一个值;同时这种具有返回值的switch必须要使用分号放在整个表达式之后;需要注意你的case必须包含所有的可能性,或者用default;这样的switch还不能使用break,return,continue语句(因为每个case中必须包含的yield已经让这个switch失去了直通性了,所以也不必使用break)。

以下这个例子中,a是整形变量,因此default是必须的,同时最后一行反括号中的分号也是必须的。

        int b = switch(a){
            case 1:
                yield 999;
            default:
                yield 1;
        };

2.java 14中引入了使用箭头代替分号的形式,这种形式为非直通式, 不需要break语句。

同样的,使用箭头的switch也有两种形式,有返回值的和无返回值的,前者也必须要末尾分号

        int b = switch(a){
            case 1 -> {     //即便只有一个语句,也必须使用大括号
                yield 999;
            }
            default -> 1;   //如果只有一个返回值语句,则可以不使用yield
        };  //有返回值的switch必须要末尾分号
        switch(a){  //等同于旧版switch不需要break,单语句可以不打大括号
            case 1 ->
                    System.out.println(999);
            default ->
                    System.out.println(1);
        }   //无返回值的switch不需要末尾分号

3.java 14提供了多个case值写在一起的缩进语法,覆盖直通式和非直通式两种switch。

        switch(a){
            case 1,2,3 ->
                    System.out.println(999);
            default ->
                    System.out.println(1);
        } 
        switch(a){
            case 1,2,3:
                    System.out.println(999);
            default :
                    System.out.println(1);
        }

经验总结

1.由于java是向下兼容的,所以直通式无返回值的旧版switch的所有特性都不受影响。

2.对于有返回值的switch:switch表达式需要末尾分号;必须覆盖所有可能的情况;不能使用break、return、continue语句;冒号switch使用yield返回参数,箭头switch可以使用yield语句也可以在只有一个返回值语句时直接给出一个值。

3.在有返回值的箭头switch中,只要不是直接返回值的case,但凡有一个语句就必须使用大括号。

4.提供了多个case值使用逗号分隔的缩进语法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值