2024年最全技术大佬:我去,你写的 switch 语句也太老土了吧(1),java多态面试题

最后:学习总结——MyBtis知识脑图(纯手绘xmind文档)

学完之后,若是想验收效果如何,其实最好的方法就是可自己去总结一下。比如我就会在学习完一个东西之后自己去手绘一份xmind文件的知识梳理大纲脑图,这样也可方便后续的复习,且都是自己的理解,相信随便瞟几眼就能迅速过完整个知识,脑补回来。下方即为我手绘的MyBtis知识脑图,由于是xmind文件,不好上传,所以小编将其以图片形式导出来传在此处,细节方面不是特别清晰。但可给感兴趣的朋友提供完整的MyBtis知识脑图原件(包括上方的面试解析xmind文档)

image

除此之外,前文所提及的Alibaba珍藏版mybatis手写文档以及一本小小的MyBatis源码分析文档——《MyBatis源码分析》等等相关的学习笔记文档,也皆可分享给认可的朋友!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

看到上图了吧,当不小心删掉 default 语句后,编译器就会报错,提示:“没有返回语句”,为了解决这个问题,我们可以新建一个 player 变量作为返回结果,就像下面这样:

private static String createPlayer(PlayerTypes playerType) {

String player = null;

switch (playerType) {

case TENNIS:

player = “网球运动员费德勒”;

break;

case FOOTBALL:

player = “足球运动员C罗”;

break;

case BASKETBALL:

player = “篮球运动员詹姆斯”;

break;

case UNKNOWN:

throw new IllegalArgumentException(“未知”);

}

return player;

}

当添加了 player 变量后,case 语句中就需要添加上 break 关键字;另外在 switch 语句结束后,返回 player。这时候,编译器并不会提示任何错误,说明 default 语句在这种情况下是可以省略的。

从 JDK 12 开始(本例使用的是 JDK 13),switch 语句升级了,不仅可以像传统的 switch 语句那样作为条件的判断,还可以直接作为一个返回结果。来对小王的代码进行改造,如下所示:

private static String createPlayer(PlayerTypes playerType) {

return switch (playerType) {

case TENNIS -> “网球运动员费德勒”;

case FOOTBALL -> “足球运动员C罗”;

case BASKETBALL -> “篮球运动员詹姆斯”;

case UNKNOWN -> throw new IllegalArgumentException(“未知”);

};

}

够 fashion 吧?不仅 switch 关键字之前加了 return 关键字,case 中还见到了 Lambda 表达式的影子,中划线和箭头替代了冒号,意味着箭头右侧的代码只管执行无须 break。

并且,default 语句变成了可选项,可有可无,不信?你也动手试试。

新的 switch 语句足够的智能化,除了有上述的 3 个优势,还可以对枚举类型的条件进行校验。假如在 PlayerTypes 中增加了新的类型 PINGPANG(乒乓球):

public enum PlayerTypes {

TENNIS,

FOOTBALL,

BASKETBALL,

PINGPANG,

UNKNOWN

}

此时编译器会发出以下警告:

意思就是 switch 中的 case 条件没有完全覆盖枚举中可能存在的值。好吧,那就把 PINGPANG 的条件加上吧。来看一下完整的代码:

public class OldSwitchDemo {

public enum PlayerTypes {

TENNIS,

FOOTBALL,

BASKETBALL,

PINGPANG,

UNKNOWN

}

public static void main(String[] args) {

System.out.println(createPlayer(PlayerTypes.BASKETBALL));

}

private static String createPlayer(PlayerTypes playerType) {

return switch (playerType) {

case TENNIS -> “网球运动员费德勒”;

case FOOTBALL -> “足球运动员C罗”;

case BASKETBALL -> “篮球运动员詹姆斯”;

case PINGPANG -> “乒乓球运动员马龙”;

case UNKNOWN -> throw new IllegalArgumentException(“未知”);

};

}

}

switch 语句变成了强大的 switch 表达式,美滋滋啊!那假如一个运动员既会打篮球又会打乒乓球呢?

private static String createPlayer(PlayerTypes playerType) {

return switch (playerType) {

case TENNIS -> “网球运动员费德勒”;

case FOOTBALL -> “足球运动员C罗”;

case BASKETBALL,PINGPANG -> “牛逼运动员沉默王二”;

case UNKNOWN -> throw new IllegalArgumentException(“未知”);

};

}

就像上述代码那样,使用英文逗号“,”把条件分割开就行了,666 啊!

不服气?switch 表达式还有更厉害的,-> 右侧还可以是 {} 括起来的代码块,就像 Lambda 表达式那样。

private static String createPlayer(PlayerTypes playerType) {

return switch (playerType) {

case TENNIS -> {

System.out.println(“网球”);

yield “网球运动员费德勒”;

}

case FOOTBALL -> {

System.out.println(“足球”);

yield “足球运动员C罗”;

}

case BASKETBALL -> {

System.out.println(“篮球”);

yield “篮球运动员詹姆斯”;

}

case PINGPANG -> {

System.out.println(“乒乓球”);

yield “乒乓球运动员马龙”;

}

case UNKNOWN -> throw new IllegalArgumentException(“未知”);

};

}

细心的同学会发现一个之前素未谋面的关键字 yield,它和传统的 return、break 有什么区别呢?

复习的面试资料

这些面试全部出自大厂面试真题和面试合集当中,小编已经为大家整理完毕(PDF版)

  • 第一部分:Java基础-中级-高级

image

  • 第二部分:开源框架(SSM:Spring+SpringMVC+MyBatis)

image

  • 第三部分:性能调优(JVM+MySQL+Tomcat)

image

  • 第四部分:分布式(限流:ZK+Nginx;缓存:Redis+MongoDB+Memcached;通讯:MQ+kafka)

image

  • 第五部分:微服务(SpringBoot+SpringCloud+Dubbo)

image

  • 第六部分:其他:并发编程+设计模式+数据结构与算法+网络

image

进阶学习笔记pdf

  • Java架构进阶之架构筑基篇(Java基础+并发编程+JVM+MySQL+Tomcat+网络+数据结构与算法

image

  • Java架构进阶之开源框架篇(设计模式+Spring+SpringMVC+MyBatis

image

image

image

  • Java架构进阶之分布式架构篇 (限流(ZK/Nginx)+缓存(Redis/MongoDB/Memcached)+通讯(MQ/kafka)

image

image

image

  • Java架构进阶之微服务架构篇(RPC+SpringBoot+SpringCloud+Dubbo+K8s)

image

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

PC+SpringBoot+SpringCloud+Dubbo+K8s)**

[外链图片转存中…(img-YTSCFsqr-1715112574446)]

[外链图片转存中…(img-KYZIST7W-1715112574447)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值