前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 12的switch详解

Java 12的switch详解

作者头像
疯狂软件李刚
发布2020-06-24 17:00:19
8760
发布2020-06-24 17:00:19
举报
文章被收录于专栏:疯狂软件李刚疯狂软件李刚

Java的switch语句是一个变化较大的语法(可能是因为Java的switch语句一直不够强大、熟悉swift的可与swift的switch语句对比一下,就会发现Java的switch弱爆了),因为Java的很多版本都在不断地改进switch语句:

  • 从Java 5+开始,Java的switch语句可使用枚举了。
  • 从Java 7+开始,Java的switch语句支持使用String类型的变量和表达式了。
  • 从Java 11+开始,Java的switch语句会自动对省略break导致的贯穿提示警告(以前需要使用-X:fallthrough选项才能显示出来)

但从Java 12开始,Java的switch语句可能要开挂了。

Java 12以前

先看Java 12以前的switch程序,代码如下。

public class SwitchTest1
{
    public static void main(String[] args)
    {
        // 声明变量score,并为其赋值为'C'
        var score = 'C';
        // 执行switch分支语句
        switch (score)
        {
            case 'A':
                System.out.println("优秀");
                break;
            case 'B':
                System.out.println("良好");
                break;
            case 'C':
                System.out.println("中");
                break;
            case 'D':
                System.out.println("及格");
                break;
            case 'E':
                System.out.println("不及格");
                break;
            default:
                System.out.println("成绩输入错误");
        }
    }
}

这是典型的Java 11以前的switch写法,程序较为臃肿,而且你不能忘记写break,否则switch就会贯穿、导致程序出现错误(当然,Java 11会提示警告)。

Java 12不需要break了

如果你对switch忘记写break导致贯穿实在烦腻了,可以试试Java 12对switch的改进。

你只要将case后面的冒号(:)改成箭头,那么你即使不写break也不会贯穿了,因此上面程序可改写如下形式。

public class SwitchTest2
{
    public static void main(String[] args)
    {
        // 声明变量score,并为其赋值为'C'
        var score = 'C';
        // 执行switch分支语句
        switch (score)
        {
            case 'A' -> System.out.println("优秀");
            case 'B' -> System.out.println("良好");
            case 'C' -> System.out.println("中");
            case 'D' -> System.out.println("及格");
            case 'E' -> System.out.println("不及格");
            default -> System.out.println("成绩输入错误");
        }
    }
}

上面代码是不是简洁多了?

Java 12的switch表达式

Java 12的switch甚至可作为表达式了——不再是单独的语句(这是要追赶Swift的节奏呀)。例如如下程序。

public class SwitchTest3
{
    public static void main(String[] args)
    {
        // 声明变量score,并为其赋值为'C'
        var score = 'C';
        // 执行switch分支语句
        String s = switch (score)
        {
            case 'A' -> "优秀";
            case 'B' -> "良好";
            case 'C' -> "中";
            case 'D' -> "及格";
            case 'F' -> "不及格";
            default -> "成绩输入错误";
        };
    System.out.println(s);
    }
}

上面程序直接将switch表达式的值赋值给s变量,这样switch不再是一个语句,而是一个表达式,这种写法为Java的switch增加了无限想像空间。

Java 12中switch的多值匹配

当你把switch中的case后的冒号改为箭头之后,此时switch就不会贯穿了,但在某些情况下,程序本来就希望贯穿——比如我就希望两个case共用一个执行体!那Java 12的switch怎么办?

当然有办法,Java 12的switch中的case支持多值匹配,这样程序就变得更加简洁了。例如如下程序。

public class SwitchTest4
{
    public static void main(String[] args)
    {
        // 声明变量score,并为其赋值为'C'
        var score = 'B';
        // 执行switch分支语句
        String s = switch (score)
        {
            case 'A', 'B' -> "上等";
            case 'C' -> "中等";
            case 'D', 'E' -> "下等";
            default -> "成绩输入错误";
        };
    System.out.println(s);
    }
}

看到上面的代码,是不是感觉很爽,是不是感觉Java正在不断焕发新机?即使老如Java,依然可以魅力如初!

接下来的Java的switch是不是还可以支持区间匹配呢?让我们拭目以待。

本文结束

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 疯狂软件李刚 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档