SpringBoot 3.0最低版本要求的JDK 17,这几个新特性不能不知道!(文末彩蛋)
2022年,Spring Framework 6.0和 SpringBoot 3.0都会推出,在此之前,Java社区很坚挺,一直是"新版任你发,我用Java 8",不管新版本怎么出,很少有人愿意升级。
为什么是 Java 17
这一次 Spring直接跨越了 JDK 11,升级到 JDK 17,主要的考虑应该是因为JDK 17有更多的新特性支持。
JDK 17 支持的新特性
本地变量类型推断
MyObject value = new MyObject();
var value = new MyObject();
Switch 表达式
int i;
switch (x) {
case "1":
i=1;
break;
case "2":
i=2;
break;
default:
i = x.length();
break;
}
int i = switch (x) {
case "1" -> 1;
case "2" -> 2;
default -> {
int len = args[1].length();
yield len;
}
};
int i = switch (x) {
case "1": yield 1;
case "2": yield 2;
default: {
int len = args[1].length();
yield len;
}
};
Text Blocks
<html>
<body>
<p>Hello, world</p>
</body>
</html>
"<html>\n" +
" <body>\n" +
" <p>Hello, world</p>\n" +
" </body>\n" +
"</html>\n";
"""
<html>
<body>
<p>Hello, world</p>
</body>
</html>
""";
String query = """
SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`
WHERE `CITY` = 'INDIANAPOLIS'
ORDER BY `EMP_ID`, `LAST_NAME`;
""";
Records
record Person (String firstName, String lastName) {}
封闭类
public sealed interface Service permits Car, Truck {
}
public abstract sealed class Vehicle permits Car, Truck {
}
instanceof 模式匹配
if (animal instanceof Cat) {
Cat cat = (Cat) animal;
cat.miaow();
} else if (animal instanceof Dog) {
Dog dog = (Dog) animal;
dog.bark();
}
if (animal instanceof Cat cat) {
cat.miaow();
} else if(animal instanceof Dog dog) {
dog.bark();
}
switch 模式匹配
static String formatter(Object o) {
String formatted = "unknown";
if (o instanceof Integer i) {
formatted = String.format("int %d", i);
} else if (o instanceof Long l) {
formatted = String.format("long %d", l);
} else if (o instanceof Double d) {
formatted = String.format("double %f", d);
} else if (o instanceof String s) {
formatted = String.format("String %s", s);
}
return formatted;
}
static String formatterPatternSwitch(Object o) {
return switch (o) {
case Integer i -> String.format("int %d", i);
case Long l -> String.format("long %d", l);
case Double d -> String.format("double %f", d);
case String s -> String.format("String %s", s);
default -> o.toString();
};
}
总结
影响了几十万名Java开发者的“Java工程师成神之路”系列文章,相信作为Javaer的你肯定在网络上刷到读到过N次,很多人可能不知道作者Hollis是谁,但却都熟知这份“Java工程师成神之路”。
在上市的这一个月的时间里,这本书,不仅一度冲上了京东计算机与互联网图书榜第一名,竟然还冲上了科技图书榜的第一名。
关于内容
这本书是《Java工程师成神之路》系列丛书的第一本——基础篇,主要定位是帮助大家巩固基础的,书中囊括了我认为一个高级开发工程师需要掌握的所有的Java核心知识。
里面的大部分内容来源于以下几个方面:
1、日常工作中遇到的一些线上问题的经验总结;如为什么不能修改serialVersionUID、为什么接口返回值中不能使用枚举。
2、平常面试中我会问的一些高频技术问题;如为什么HashMap要引入红黑树、如何在泛型是String的List中存放Integer对象。
3、我平常自己学习的一些笔记;如为什么FastJson频繁曝出序列化漏洞、有了UTF-8为什么还需要GBK
4、工作中的一些好的代码实践;如为什么我不建议使用声明式事务、如何通过自定义注解写出优秀的代码
这本书是基于JDK 17编写的,其中不仅涵盖了新版本JDK的一些重要特性,也对一些历史版本的一些改动、变化等等做了详尽的阐述,如JDK 6中substring的内存泄漏问题、JDK 7 中switch是如何实现对String的支持的、JDK 8的中Stream如何优雅使用、各个版本中的HashMap的优化过程等等。
还介绍了JDK 9中的模块化技术、JDK 10中的本地变量类型推断、JDK 13中的text block、JDK 14中的record类型、以及JDK 16 – JDK 17中的模式匹配等等。
这本书和其他Java基础类书籍最大的区别就是里面都是干货。书中没有那些概念性的描述、也没有那些无用的代码示例。更多的是通俗易懂的解读、底层原理的分析等。可以说没有任何废话。。。
在书籍刚刚出版的时候,我给大家说这本书中有一个彩蛋,现在可以告诉大家这个彩蛋是什么了。
用出版社的老师们的话来说,这真是史无前例的。
这是一份我自己总结的Java工程师知识地图,他有70cm*100cm这么大,里面囊括了一份完完整整的知识体系,方便大家进行对照和参考。
如果你想知道Java开发都需要会哪些知识。如果你想构建自己的知识体系。如果你想知道自己还有哪些东西不会。如果你想知道自己当前处于哪个阶段。
那这份知识体系,一定不能错过。
购书福利
最后给广大粉丝的优惠肯定不能少!!!
大家可以通过下方的二维码,或者点击阅读原文,直达京东下单购买《深入理解Java核心技术:写给Java工程师的干货笔记(基础篇)》一书。
5折优惠,原价138元,附赠一份全栈的Java工程师知识地图!
现在到手价只需69元!
转发文章并留言,小编从留言中精选5名幸运粉丝,免费包邮送出一份“Java工程师知识地图”助你全面掌握Java技术栈!
▼点击阅读原文,享5折优惠