赞
踩
从springboot3.0开始,已经不⽀持JDK8了
选⽤Java17,概括起来主要有下⾯⼏个主要原因
- JDK17是LTS(⻓期⽀持版),可以免费商⽤到2029年。⽽且将前⾯⼏个过渡版(JDK9-JDK16) 去其糟粕,取其精华的版本
- JDK17性能提升不少,⽐如重写了底层NIO,⾄少提升10%起步;
- ⼤多数第三⽅框架和库都已经⽀持,不会有什么⼤坑;
创造不易,可以点点赞吗~
如有错误,欢迎指出~
目录
yield关键字,从Java13开始引⼊。yield关键字⽤于从case的代码块中返回值。
简化switch 语句
- public static void main(String[] args) {
- String data = "one" ;
- int result = switch (data) {
- case "one"->1;
- case "two"->2;
- default->-1;
- };
- System.out.println(result) ;
- }
利用yield关键字代替->
- public static void main(String[] args) {
- String data = "one" ;
- int result = switch (data) {
- case "one" : yield 1;
- case "two": yield 2;
- default : yield -1;
- };
- System.out.println(result) ;
- }
var关键字
从Java10开始,var被引⼊
用于自动推导代码的类型,例如下面代码,编译器会⾃动推断出name是⼀个String类型,age是⼀个int类型。
- public static void main(String[] args) {
- var name ="zhangsan";
- var age =10;
- }
使⽤var可以使代码更简洁。有时候,类型名称可能会⾮常⻓,例如泛型。var就像是⼀个简化器,让 你不必反复写出繁琐的类型名。
例如下面代码中var根据后面的HashMap<String, List<Map<Integer, String>>>()自动推导类型 ,即这里的var代表Map<String, List<Map<Integer, String>>> 类型
- public static void main(String[] args) {
- Map<String, List<Map<Integer, String>>> complexMap = new HashMap<String,
- List<Map<Integer, String>>>();
-
- var complexMap2 = new HashMap<String, List<Map<Integer, String>>>();
-
- }
注意:
用fianl修饰的类不能被继承。
JDK17提供了⼀个新的关键字: sealed .密封类除了可以被该关键字修饰,并且在声明末尾⽤ permits 表⽰要开放给哪些类型。
- //这里的sealed表示密封类,与fianl不同的是,它可以使用permits开放给一些类继承
- sealed class Person permits YL{
-
- }
- //继承的类也要加上密封限制 non-sealed 表⽰不限制
- non-sealed class YL extends Person{
-
- }
注意:
sealed修饰的类必须要有⼦类
使⽤ non-sealed 关键字修饰。表⽰不限制,任何类都可以继承。
未被 permits 允许的类型,则没办法继承
- sealed class Animal permits Dog,Cat {
- public String name;
- public int age;
- public void eat() {
- System.out.println("eat()....");
- }
- }
- sealed class Cat extends Animal permits OrgCat{
-
- }
- non-sealed class OrgCat extends Cat {
-
- }
Java8,接⼝可以有默认⽅法。Java9之后,可以在接⼝内实现私有⽅法实现。
- interface Hello{
- //默认方法
- default void saySomething(){
-
- }
- //私有方法
- private void sayEngHello(){
- System.out.println("Hello!");
- }
- }
- if (obj instanceof String) {
- String str = (String) obj;
- ...
- }
上⾯的instancof语法⼀共做了三件事
在JDK16中,使⽤模式匹配思想改进了instanceof⽤法,可以做到以下优化效果:
- if (obj instanceof String str) {// obj是否为String类型,如果是创建临时变量str
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。