自Java13以来,Switch表达式被添加到Java核心库中。如果您使用的是Java版本13或更高版本,那么您肯定可以将旧Switch转换为新Switch。

本文将讨论它如何在不破坏现有更改的情况下提供某些功能。当然,其他语言用户可能会评论“多年前,它就已经存在于我们的编程语言中了”。但让我们微笑一下,继续用Java编程,好吗?注意,我将在帖子中交替使用“ switch expression ”和“ switch statement ”,所以请记住,我想说的是同一件事。

旧的Java Switch语句

switch语句将以更可读、更简洁的方式(并非每次)替换单个变量的if-else-if梯形图。是的,我知道,这不是一个精确的定义。

让我们看一个实际的例子。假设你按下了一个按钮,并且有了特定的按钮代码,你需要有一些与之相关的命令。现在,您可以执行第一块中显示的if-else-if梯形图,或者将其转换为第二块中显示的开关表达式:

if(button == 1) {command = "on";
}
else if(button == 2){command = "off";
}
else if(button == 3 || button == 4) {command = "ring";
}
else{throw new RuntimeException("Wrong Button Code");
}

switch表达式:

switch(button){case 1:command = "On";break;case 2:command = "off";break;case 3:case 4:command = "ring";break;default:throw new RuntimeException("Wrong Button Code");
}

正如你所见,这个switch即使我们减少了条件检查,我们也必须添加很多额外的代码,比如break语句。这就是新的Java Switch语句或表达式帮助我们的地方。与其说是一个新的,不如说是一个“更新的开关表达式”。但无论如何,让我们看看。

新的switch语句

在新的switch语句中,您将看到的第一件事是,您根本不必编写 break 语句。要做到这一点,你必须使用箭头 -> ,我们在lambda中使用的箭头,来告诉这个案例的开始。至于实际的代码块,可以将其设置为一行表达式,也可以在代码块周围使用一个花括号。

此外,对于不同case的相同评估,您不需要多次编写case语句,您可以用逗号分隔它们(例如,上例中的case3和case4)。

switch(button){case 1 ->  command = "on"; // on linercase 2 -> {// do somethingcommand = "off"; //  a block with curly brackets}case 3, 4 -> command = "ring"; //  case can be combined with a commadefault -> throw new RuntimeException("Wrong Button Code");
}

看看代码变得多么简洁。不需要额外的中断声明。此外,可以在不重复关键字的情况下组合案例。但等等,不是这样的。关于这个更新的Java switch语句,还有一件事。

Java Switch表达式的收益率

我们可以从switch语句中得到一个结果。简单地说,您只能从开关块返回特定的内容。它对switch语句使用Java13新添加的 yield 关键字。这只不过是对开关的回报。举个例子你会更好地理解。

假设在上面的例子中,我们为每种情况都修改了命令变量。现在,我们可以直接从特定情况返回特定字符串,并将其分配给命令,而不是对同一变量进行变异。你可以同时使用“冒号大小写”或“箭头大小写”。让我们看看如何。

箭头case ->

String command = switch(button){case 1 -> {yield "on"; } case 2 -> {yield "off";}case 3,4 ->  {  // multiple caseyield "ring";}default -> throw new RuntimeException("Wrong Button Code");
};

冒号case:

String command = switch(button){case 1:yield "on";// no break should be usedcase 2:yield "off";case 3:case 4:yield "ring";default:throw new RuntimeException("Wrong Button Code");
};

使用switch时请记住这几点:

break
yield

结论

java的switch语句或表达式不如Kotlin或Scala的switch表达式强大,但我认为我们可以看到它在不久的将来在Java中变得更加强大。在那之前,让我们试着在代码中使用这个东西。

给大家整理了今年来最经典的面试真题100道,每个题目都有详细的解答,收集了java基础、RabbitMQ,微服务、MySQL数据库、Java并发、JVM,Redis、设计模式,Spring / Spring MVC,等专题的经典面试真题,和详细分析。

数据库篇

  1. 事务四大特性(ACID)原子性、一致性、隔离性、持久性?
  2. 事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别?
  3. MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)的区别?
  4. MySQL的MyISAM与InnoDB两种存储引擎在,事务、锁级别,各自的适用场景?
  5. MySQL B+Tree 索引和 Hash 索引的区别?
  6. sql 查询语句确定创建哪种类型的索引,如何优化查询
  7. 有哪些锁(乐观锁悲观锁),select 时怎么加排它锁?
  8. 数据库的读写分离、主从复制,主从复制分析的 7 个问题?
  9. MySQL 都有什么锁,死锁判定原理和具体场景,死锁怎么解决?
  10. MySQL 高并发环境解决方案?

这些问题都是抽取了部分发出来,答案解析和知识点都整理在这个近500页的Java学习笔记文档里了,详细内容有很多,为了不影响阅读,可看整理的《Java架构进阶笔记》可关注下方公众号

Spring篇

  1. Spring IoC、AOP 原理
  2. Spring Bean 生命周期
  3. Spring Bean 注入是如何解决循环依赖问题的
  4. 怎样用注解的方式配置 Spring?
  5. Spring 事务为何失效了
  6. SpringMVC 的流程?
  7. Springmvc 的优点:
  8. Spring 通知类型使用场景分别有哪些?
  9. IoC 控制反转设计原理?
  10. Spring 如何处理线程并发问题?

JVM篇

  1. Java 类加载过程?
  2. 描述一下 JVM 加载 Class 文件的原理机制?
  3. 简述 Java 垃圾回收机制。
  4. 什么是类加载器,类加载器有哪些?
  5. 如何判断一个对象是否存活?(或者 GC 对象的判定方法)
  6. 垃圾回收的优点和原理。并考虑 2 种回收机制。
  7. 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收
  8. Java 中会存在内存泄漏吗,请简单描述。
  9. 简述 Java 内存分配与回收策率以及 Minor GC 和 Major GC。
  10. Java 中垃圾收集的方法有哪些?

Java并发篇

  1. Synchronized 用过吗,其原理是什么?
  2. 为什么说 Synchronized 是非公平锁?
  3. 为什么说 Synchronized 是一个悲观锁?乐观锁的实现原理又是什么?什么是 CAS,它有
  4. 请尽可能详尽地对比下 Synchronized 和 ReentrantLock 的异同。
  5. 谈谈 ReadWriteLock 和 StampedLock。
  6. 如何让 Java 的线程彼此同步?你了解过哪些同步器?请分别介绍下。
  7. 线程池中的线程是怎么创建的?是一开始就随着线程池的启动创建好的吗?
  8. 提到可以通过配置不同参数创建出不同的线程池,那么 Java 中默认实现好的线程池又有哪些呢?请比
  9. 如何在 Java 线程池中提交线程?
  10. 请谈谈 volatile 有什么特点,为什么它能保证变量对所有线程的可见性?

这些问题都是抽取了部分发出来,答案解析和知识点都整理在这个近500页的Java学习笔记文档里了,

Redis缓存篇

  1. 什么是 Redis 事务?原理是什么?
  2. 请介绍一下 Redis 的数据类型 SortedSet(zset)以及底层实现机制?
  3. Redis 常用的命令有哪些?
  4. 什么是缓存穿透?怎么解决?
  5. 什么是缓存雪崩? 怎么解决?
  6. 请介绍几个可能导致 Redis 阻塞的原因
  7. 缓存的更新策略有几种?分别有什么注意事项?
  8. Redis 为什么设计成单线程的?
  9. Redis 持久化机制 AOF 和 RDB 有哪些不同之处?
  10. Redis 缓存失效策略有哪些?

RabbitMQ篇

  1. RabbitMQ 的使用场景有哪些?
  2. RabbitMQ 有哪些重要的角色?
  3. RabbitMQ 有哪些重要的组件?
  4. RabbitMQ 的消息是怎么发送的?
  5. RabbitMQ 怎么保证消息的稳定性?
  6. RabbitMQ 怎么避免消息丢失?
  7. 要保证消息持久化成功的条件有哪些?
  8. RabbitMQ 有几种广播类型?
  9. RabbitMQ 怎么实现延迟消息队列?
  10. RabbitMQ 集群中唯一一个磁盘节点崩溃了会发生什么情况?

Java集合篇

  1. ArrayList 和 Vector 的区别
  2. 说说 ArrayList,Vector, LinkedList 的存储性能和特性
  3. 快速失败 (fail-fast) 和安全失败 (fail-safe) 的区别是什么?
  4. hashmap 的数据结构。
  5. HashMap 的工作原理是什么?
  6. Hashmap 什么时候进行扩容呢?
  7. HashSet 和 TreeSet 有什么区别?
  8. HashSet 的底层实现是什么?
  9. LinkedHashMap 的实现原理?
  10. Collection 和 Collections 的区别。

微服务篇

  1. 使用Spring Cloud有什么优势?
  2. 服务注册和发现是什么意思?Spring Cloud如何实现?
  3. 负载平衡的意义什么?
  4. 什么是Hystrix?它如何实现容错?
  5. 什么是Hystrix断路器?我们需要它吗?
  6. 什么是Netflix Feign?它的优点是什么?
  7. Spring Boot 的核心配置文件有哪几个?它们的区别是什么?
  8. Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
  9. Spring Boot中的监视器是什么?
  10. 什么是Swagger?你用Spring Boot实现了它吗?

Zookeeper篇

  1. zk的命名服务(文件系统)
  2. zk的配置管理(文件系统、通知机制)
  3. Zookeeper集群管理(文件系统、通知机制)
  4. Zookeeper分布式锁(文件系统、通知机制)
  5. 获取分布式锁的流程
  6. Zookeeper队列管理(文件系统、通知机制)
  7. Zookeeper数据复制
  8. Zookeeper工作原理
  9. zookeeper是如何保证事务的顺序一致性的?
  10. Zookeeper 下 Server工作状态

解决方案篇

  1. API接口安全设计
  2. 秒杀系统设计思路
  3. 分布式事务解决方案
  4. SSO单点登录方案
  5. Redis缓存和MySQL数据一致性方案详解
  6. 分库分表设计
  7. 缓存雪崩,穿透,击穿解决方案

最后

对于这些问题我都整理了答案,记录在这个Java学习笔记里,这份笔记包括了Spring,JVM,java基础,Java集合,Java并发编程,微服务,网络,Kafka,分布式,Redis,大厂面试解决方案,分布式事务,设计模式,算法,数据结构,MySQL等

详细内容有很多,为了不影响阅读,可看整理的《Java架构进阶笔记》可关注下方公众号!免费货区

Java 18 Switch语句更强大了相关推荐

  1. java用switch语句根据分数输出学生等级

    java用switch语句根据分数输出学生等级 /*** 从键盘上输入分数,计算等级grade=score/10;* <60,不及格,继续努力!* 60-69,及格,仍需努力!* 70-79,一 ...

  2. java用switch语句算,Java的switch语句与条件运算符

    文章导读 [前面学习了条件结构的if语句,可以解决多条件判断的情况.除了if语句外,Java语言还提供了switch语句和条件运算符用于简化条件判断语句的编写.本篇探讨Java的switch语句和条件 ...

  3. 解析java当中switch语句的作用和break、continue关键字的用法

    解析java当中switch语句的作用和break.continue关键字的用法 A. switch语句 1.含义 是分支结构,使程序按照条件的判断结果去执行相应的程序代码. 2.语法 switch( ...

  4. Java 10.switch语句

    switch语句 switch语句可以是程序从多条执行路径中选择一条来执行,这些路径的选择基于某个单一的值. switch语句先计算一个表达式的值,然后将该值和几个可能的case子句取值进行匹配.每种 ...

  5. [Java基础]JAVA的SWITCH语句(String)

    switch 语句相当于 if else的另一种表达方式 switch 控制表达式支持的类型有byte.short.char.int.enum(Java 5).String(Java 7). 注: 每 ...

  6. Java程序 switch语句

    switch语句 import java.util.Scanner; public class Switchr {public static void main(String args[]){int ...

  7. Java中switch语句支持的类型

    switch语句表达式的取值类型: 基本数据类型:byte,short,int,char JDK5以后可以是枚举 JDK7以后可以是String 不支持long.float.double.boolea ...

  8. Java语言Switch语句详解(一)

    Switch语句概述 1.switch语句称为情况选择语句,又称为开关语句. 2.switch是分支语句的一种,用于对多种情况进行不同处理的语句. 3.JDK1.7 之前的switch语句限定对整形数 ...

  9. java中switch语句用法详解

    1.switch语句的基本语法 int week =**: switch(week){//week为定义的变量 case **://case 之后使用空格再加 满足week的值 执行语句//当满足此c ...

最新文章

  1. 双击jar运行main主函数实现-fatJAR
  2. “RPC 好,还是 RESTful 好?” 不要选错了!
  3. Windows_API_函数 参考大全
  4. HTTP之100-Continue
  5. guava api_使用Google Guava的订购API
  6. Linux高频命令汇总,Linux高频命令
  7. 无监督学习 | KMeans与KMeans++原理
  8. 设置时区,时间,日期的脚本
  9. Golang 25 个保留关键字
  10. 4207. 最长合法括号子序列
  11. 题号的随机抽取滚动背景以及题号展示背景如何定制?
  12. QT表格QTableWidget在win10下纵横表头无分隔线的问题
  13. 汇编intel 8086/8088/80386 学习
  14. linux 分区怎样缩小,如何缩小磁盘分区大小
  15. 站点LOGO开通注意事项,百度LOGO权限开通的技巧
  16. oracle11 如何启动企业管理器
  17. CV面试知识点总结--机器学习
  18. 多设备monkey测试工具_基于Tkinter GUI操作
  19. PostgreSQL中的io多路复用--select和epoll实现
  20. Kotlin使用Coroutine+ViewModel+retrofit构建一个网络请求框架

热门文章

  1. UVALive 7139 Rotation
  2. 思科ASR防火墙实操手册
  3. WindowsPE(一)PE头字段节表
  4. Flutter之国际化多语言
  5. Python提取 “Excel文本框” 内容,这个需求头一次见,1000个表,10行代码!
  6. three.js数学函数向量夹角弧度转角度
  7. Friends小游戏完整代码
  8. 中国专利电子申请网服务器未响应,专利电子申请使用数字证书时遇到问题的解决办法...
  9. 小米抢购页面源码分析2014年03月11号
  10. Select字段名和Select*