茴字的四种写法--Java中的switch

很多编程语言都支持switch语句,以便快速在多个分支中选择某一个,Java也不例外,同样支持该语句,但是与其他的编程语言不大一样,它有自己的特色。

 1. 常规switch语句

最常见的使用方式是各种case+break组合,如下所示:

    public static void main(String[] args)
    {
        Scanner s = new Scanner(System.in);

        int x = s.nextInt();
        switch (x)
        {
            case 0:
                System.out.println("Zero");
                break;
            case 1:
                System.out.println("One");
                break;
            case 2:
                System.out.println("Two");
                break;
        }
    }

这样,输入1,就会回显One,Java和C#在switch中第一个不同就是,C#不允许case中不加break,而Java中如果不加break,就会出现直通(fall-through)的现象,即输入1,会显示One和Two这两行;另外就是default,和一般的C语言中没什么两样,就是没有命中任何一个分支的操作。这些都是老生常谈,就不再细说了。

其实,知道这个,就可以“一招鲜,吃遍天”了,但是其他几个语法特点,还是值得我们去了解一下的。

2. 无直通行为

Java对switch的第一个扩展是,可以使用->替换case后面的冒号,这样,即使不加break,它也不会产生直通行为,代码如下:

    public static void main(String[] args)
    {
        Scanner s = new Scanner(System.in);
        int x = s.nextInt();
        switch (x)
        {
            case 0->
                System.out.println("Zero");
            case 1->
                System.out.println("One");
            case 2->
                System.out.println("Two");
        }
    }

上面的代码中,输入0只会显示Zero,而不会出现直通现象,使用->需要注意如下两点:

1. 不能混合使用->和: ,否则产生语法错误;

2. 不要画蛇添足的在case的最后一条语句中加上break,同样会产生语法错误。

3. switch表达式

switch还能构成语句,在不同的分支下返回一个值,这通常是和yield搭配使用的,代码如下:

    public static void main(String[] args)
    {
        Scanner s = new Scanner(System.in);
        int x = s.nextInt();
        String str;
        str=switch (x)
        {
            case 0:
               yield "Zero";
            case 1:
                yield "One";
            case 2:
                yield "Two";
            default:
                yield "Unknown";
        };
        System.out.println(str);
    }

使用的时候要注意,switch有两个位置务必书写完整:

1. 必须所有的分支都有返回值(或者抛出异常),因此通常必须要有default语句;

2.switch语句的花括号后面,要添加分号(;)。

另外,上面的代码输入0也就显示Zero,看起来是没有直通行为的,实际上,这种方式也是支持直通行为的,如果前面的一个分支上没有yield值,则会继续直通下去,如下:

    public static void main(String[] args)
    {
        Scanner s = new Scanner(System.in);
        int x = s.nextInt();
        String str;
        str=switch (x)
        {
            case 0:
                System.out.println(0+"");
            case 1:
                System.out.println(1+"");
                yield "One";
            case 2:
                System.out.println(2+"");
                yield "Two";
            default:
                System.out.println("Unknown");
                yield "Unknown";
        };
        System.out.println(str);
    }

输入0的结果是,打印0,1以及One三行。因为case 0中没有返回值,因此并不会返回值给str,代码会继续执行到case 1中,当然这里仅为了阐述这一现象,实际使用时,强烈不建议这么做。

4. 省略yield的switch表达式

有时候switch语句返回值很简单,可以这样写:

    public static void main(String[] args)
    {
        Scanner s = new Scanner(System.in);
        int x = s.nextInt();
        String str;
        str=switch (x)
        {
            case 0-> "Zero";
            case 1-> "One";
            case 2-> "Two";
            default-> "Unknown";
        };
        System.out.println(str);
    }

即在箭头符号后面直接跟着写需要返回的值即可,当然,如果无法做到这一点,可以结合使用yield语句。

最后,总结一下几个特点:

A:关于直通现象

1. 使用冒号(:),没有break的话就会直通;

2. 使用箭头(->),没有返回值的分支就会产生直通;

B:关于表达式

1. 表达式可以使用冒号和箭头方式,但是所有的分支必须要有返回值;

2. 不能在switch表达式中使用return、break及continue语句。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值