【java12】java12新特性之switch表达式

Java12引入了对switch语句的增强,允许在switch语句中使用表达式来代替传统的语句列表。这样可以使得代码更加简洁和易读。

switch表达式也是作为预览语言功能的第一个语言改动被引入新版Java中来的,这是一种引入新特性的测试版的方法。通过这种方式,能够根据用户反馈进行升级、更改,如果没有被很好的接纳,则可以完全删除该功能。预览功能的没有被包含在JavaSE规范中。也就是说:这不是一个正式的语法,是暂时进行测试的一种语法。

传统的switch声明语句(switch statement)在使用中有一些问题:

  • 匹配自上而下,若无break,后面的case语句都会执行
  • 不同的case语句定义的变量名不能重复
  • 不能在一个case里写多个执行结果一致的条件
  • 整个switch不能作为表达式返回值

switch详细语法

扩展的switch语句,不仅可以作为语句(statement),还可以作为表达式(expression),并且两种写法都可以使用传统的 switch语法,或者使用简化的case L ->模式匹配语法作用于不同范围并控制执行流。这些更改将简化日常编码工作,并为 switch中的模式匹配(JEP305)做好准备。

使用Java12中switch表达式的写法,省去了break语句,避免了因少写break而出错。

同时将多个case合并到一行,显得简洁、清晰也更加优雅的表达逻辑分支,其具体写法就是将之前的case语句表成了case L ->,即如果条件匹配case,则执行标签右侧的代码,同时标签右侧的代码段只能是表达式、代码块或throw语句。

为了保持兼容性,case条件语句中依然可以使用字符,这时fall-through规则依然有效的,即不能省略原有的break语句,但是同一个switch结构里不能混用->:,否则会有编译错误。并且简化后的switch代码块中定义的局部变量,其作用域就限制在代码块中,而不是蔓延到整个switch结构,也不用根据不同的判断条件来给变量赋值。

JAVA12之前switch语句

package com.morris.java12;

/**
 * java12之前switch的使用
 */
public class SwitchBefore12Demo {
    public static void main(String[] args) {
        Month month = Month.APRIL;
        String season;
        switch (month) {
            case DECEMBER:
            case JANUARY:
            case FEBRUARY:
                season = "winter";
                break;
            case MARCH:
            case APRIL:
            case MAY:
                season = "spring";
                break;
            case JUNE:
            case JULY:
            case AUGUST:
                season = "summer";
                break;
            case SEPTEMBER:
            case OCTOBER:
            case NOVEMBER:
                season = "autumn";
                break;
            default:
                throw new RuntimeException("NoSuchMonthException");
        }
        System.out.println(season); // spring
    }
}

JAVA12中switch语句

package com.morris.java12;

/**
 * java12中switch的使用
 */
public class Switch12Demo {
    public static void main(String[] args) {
        Month month = Month.APRIL;
        String season;
        switch (month) {
            case DECEMBER, JANUARY, FEBRUARY -> season = "winter";
            case MARCH, APRIL, MAY -> season = "spring";
            case JUNE, JULY, AUGUST -> season = "summer";
            case SEPTEMBER, OCTOBER, NOVEMBER -> season = "autumn";
            default -> throw new RuntimeException("NoSuchMonthException");
        }
        System.out.println(season); // spring
    }
}

switch作为表达式返回值

下面是一个简单的示例:

package com.morris.java12;

/**
 * java12中switch的使用,作为表达式的返回值
 */
public class Switch12Demo2 {
    public static void main(String[] args) {
        Month month = Month.APRIL;
        String season = switch (month) {
            case DECEMBER, JANUARY, FEBRUARY -> "winter";
            case MARCH, APRIL, MAY -> "spring";
            case JUNE, JULY, AUGUST -> "summer";
            case SEPTEMBER, OCTOBER, NOVEMBER -> "autumn";
            default -> throw new RuntimeException("NoSuchMonthException");
        };
        System.out.println(season); // spring
    }
}

在这个示例中,switch语句的返回值是根据不同的case条件计算得出的。这种语法形式可以减少冗余的代码,提高代码的可读性。

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

morris131

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值