文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java 中 switch 的用法

2023-10-20 07:17

关注

Java 中 switch 的用法

switch 中的表达式的数据的数据类型为 byte, short, int, char, String(jdk > 1.7支持 String 类型)
2、default 可以放在任意一行,但是不管放在那一行,都会先找第一个case去匹配,如果所有的 case 都不匹配,才会执行 default,default 可以省略不写。
3、break 可以不写,就容易造成 switch 的穿透现象,如果匹配过一次或者执行过 default 之后,都不会再进行二次匹配了,但是语句体内容该执行还是会执行。

JDK 12 对 switch 进行扩展,使其可以用作语句或表达式。

一、Java 中 switch 的语法

1、冒号(:):有直通行为

标准方式,使用 break 防止 case 代码执行穿透。

2、 箭头(->):无直通行为

使用 switch 标准方式编写代码太多的 break 造成代码冗余可读性不高,可以借助函数式接口和 lambda 表达式简化书写。

3、break:

break 防止 case 代码执行穿透;

4、yield :返回值

二、switch 语句

1、标准方式,有直通行为

switch(seasonName){case "Spring":System.out.println("spring time");case "Summer","Winter":numLetters = 6;break;case "Fall":numLetters = 4;break;default:numLetters = -1;}

2、lambda 表达式书写,无直通行为

switch(seasonName){case "Spring" -> {System.out.println("spring time");numLetters = 6;}case "Summer","Winter" -> numLetters = 6;case "Fall" -> numLetters = 4;default -> numLetters = -1;}

三、switch 表达式

public class Test {    enum Alpha {A, B, C, D, E;}    public static void main(String[] args) {        System.out.print(fun(Alpha.A));    }    static char fun(Alpha alpha) {        var r = switch (alpha) {            case A -> 'a';            case B -> 'b';            case C -> 'c';            case D -> 'd';            default -> 'x';        };        return r;    }}

1、有直通行为(Java 14引入)

        String seasonName = "Spring";        int numLetters;        numLetters = switch(seasonName){            case "Spring":                System.out.println("spring time");            case "Summer","Winter":                yield 6;            case "Fall":                yield 4;            default:                yield -1;        };        System.out.println(numLetters);

2、无直通行为

int numLetters;numLetters = switch(seasonName){    case "Spring" ->{        System.out.println("spring time");        yield 6;    }    case "Summer","Winter" -> 6;    case "Fall" -> 4;    default -> -1;};

注意

  1. switch() 括号内 seasonName,应与 case 后常量类型保持一致,或者是可以自动转换成可以互相比较的类型。
  2. case 标签:类型为 char、byte、short 或 int 的常量表达式;枚举常量 enum;字符串字面量 String;多个字符串用逗号分隔。
  3. case 子句中的值必须是常量,不能是变量。
  4. 在语句中,default 是可选的。
  5. break 和 yield 语句用来在执行完一个 case 分支后使程序跳出 switch 语句,如果没有 break 或 yield,程序会顺序执行到 switch 结尾,产生直通行为。
  6. 不能在一个 switch 语句中混合使用冒号和箭头。
  7. 与 break 语句类似,yield 会终止执行。但与 break 不同的是,yield 还会生成一个值,这就是表达式的值。

四、Switch 语句与表达式的区别:

  1. switch 代码块出现在了赋值运算符的右侧;
  2. 一个 case 语句,可以处理多个情景;
  3. 新的情景操作符,“->”,它是一个箭头标识符;
  4. 箭头标识符右侧的数值。这个数值,代表的就是该匹配情景下,switch 表达式的数值。需要注意的是,箭头标识符右侧可以是表达式、代码块或者异常抛出语句,而不能是其他的形式;
  5. yield 语句产生的值看成是 switch 表达式的返回值。所以,yield 只能用在 switch 表达式里。

Java 枚举(enum)

Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。

Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 (,) 来分割。

颜色的枚举类
enum Color{ RED, GREEN, BLUE; }
以上枚举类 Color 颜色常量有 RED, GREEN, BLUE,分别表示红色,绿色,蓝色。

enum Color{ RED, GREEN, BLUE; }   public class Test {        public static void main(String[] args){         Color c1 = Color.RED;         System.out.println(c1);     } }

来源地址:https://blog.csdn.net/weixin_43955170/article/details/130030570

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯