天猫网站建设分析,购物网站设计,wordpress本地建站教程,买了个域名 如何建网站JDK新版本中的新特性都有哪些 ✔️经典解析✔️拓展知识仓✔️本地变量类型推断✔️Switch 表达式✔️Text Blocks✔️Records✔️封装类✔️instanceof 模式匹配✔️switch 模式匹配 ✅✔️虚拟线程 ✔️经典解析 JDK 8中推出了Lambda表达式、Stream、Optional、新的日期API等… JDK新版本中的新特性都有哪些 ✔️经典解析✔️拓展知识仓✔️本地变量类型推断✔️Switch 表达式✔️Text Blocks✔️Records✔️封装类✔️instanceof 模式匹配✔️switch 模式匹配 ✅✔️虚拟线程 ✔️经典解析 JDK 8中推出了Lambda表达式、Stream、Optional、新的日期API等 JDK 9中推出了模块化 JDK 10中推出了本地变量类型推断 JDK 12中增加了switch表达式 JDK 13中增加了text block JDK 14中增加了Records JDK 14中增加了instance模式匹配 JDK 15中增加了封闭类 JDK 17中扩展了switch模式匹配 JDK 19中增加了协程 ✔️拓展知识仓 ✔️本地变量类型推断 在Java 10之前版本中我们想定义定义局部变量时。我们需要在赋值的左侧提供显式类型并在赋值的右边提供实现类型: MyObject value new MyObject();在Java 10中提供了本地变量类型推断的功能可以通过var声明变量: var value new MyObject();本地变量类型推断将引入“var”关键字而不需要显式的规范变量的类型。 其实所谓的本地变量类型推断也是Java 10提供给开发者的语法糖。 关于语法糖我前面有详细讲解到也可以在博主的置顶文章看到这里放个链接。 语法糖传送门。 虽然我们在代码中使用var进行了定义但是对于虚拟机来说他是不认识这个var的在java文件编译成class文件的过程中会进行解糖使用变量真正的类型来替代var。 ✔️Switch 表达式 在JDK 12中引入了Switch表达式作为预览特性。并在Java 13中修改了这个特性引入了yield语句用于返回值。 而在之后的Java 14中这一功能正式作为标准功能提供出来。 在以前我们想要在 switch 中返回内容还是比较麻烦的一般语法如下: int i;
switch (x) {case 1:i 1;break;case 2:i 2;break;default:i x.length();break;
}在JDK13中使用以下语法 int i switch (x) {case 1 - 1;case2 - 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;}
};在这之后switch中就多了一个关键字用于跳出switch块了那就是yield他用于返回一个值。 和return的区别在于: return会直接跳出当前循环或者方法而yield只会跳出当前switch块。 ✔️Text Blocks Java 13中提供了一个Text Blocks的预览特性并且在Java 14中提供了第二个版本的预览。 text block文本块是一个多行字符串文字它避免了对大多数转义序列的需要以可预测的方式自动格式化字符串并在需要时让开发人员控制格式。 我们以前从外部copy一段文本串到Java中会被自动转义如有一段以下字符串: htmlbodypHelloworld/p/body
/html将其复制到Java的字符串中会展示成以下内容: htmI\n body\n pHelloworld/p\n body\n
htmI\n;即被自动进行了转义这样的字符串看起来不是很直观在JDK 13中就可以使用以下语法了: htmlbodypHelloworld/p/body
/htmI
;使用 作为文本块的开始符合结束符在其中就可以放置多行的字符串不需要进行任何转义看起来就十分清爽了。 如常见的SQL语句: String query SELECT EMP_IDLAST NAME FROM EMPLOYEE_TBWHERE CITY INDIANAPOLISORDER BY EMP_IDLAST_NAME;;看起来就比较直观清爽了。 ✔️Records Java 14 中便包含了一个新特性: EP 359: Records Records的目标是扩展Java语言语法Records为声明类提供了一种紧凑的语法用于创建一种类中是 “ 字段只是字段除了字段什么都没有 ” 的类。 通过对类做这样的声明编译器可以通过自动创建所有方法并让所有字段参与 hashCode() 等方法。这是JDK 14中的一个预览特性。 使用record关键字可以定义一个记录 record Person (String firstNameString lastName) {}record 解决了使用类作为数据包装器的一个常见问题。纯数据类从几行代码显著地简化为一行代码。
✔️封装类 在Java 15之前Java认为代码重用始终是一个终极目标所以一个类和接口都可以被任意的类实现或继承。 但是在很多场景中这样做是容易造成错误的而且也不符合物理世界的真实规律。 例如假设一个业务领域只适用于汽车和卡车而不适用于摩托车。
在Java中创建Vehicle抽象类时应该只允许Car和Truck类扩展它。 通过这种方式我们希望确保在域内不会出现误用Vehicle抽象类的情况。 为了解决类似的问题在Java 15中引入了一个新的特性一一密闭。 想要定义一个密闭接口可以将sealed修饰符应用到接口的声明中。然后permit子句指定允许实现密闭接口的类: public sealed interface Service permits Car Truck {}以上代码定义了一个密闭接口Service它规定只能被Car和Truck两个类实现。 与接口类似我们可以通过使用相同的sealed修饰符来定义密闭类 public abstract sealed class Vehicle permits Car Truck {}通过密闭特性我们定义出来的Vehicle类只能被Car和Truck继承。 ✔️instanceof 模式匹配 instanceof 是Java中的一个关键字我们在对类型做强制转换之前会使用instanceof 做一次判断。比如 if (animal instanceof Cat) {Cat cat (Cat) animal;cat .miaow();
} else if (animal instanceof Dog) {Dog dog (Dog) animal;dog.bark();
}Java 14带来了改进版的 instanceof 操作符这意味着我们可以用更简洁的方式写出之前的代码例子: if (animal instanceof Cat cat) {cat .miaow();
} else if(animal instanceof Dog dog) {dog.bark();
}我们都不难发现这种写法大大简化了代码省略了显式强制类型转换的过程可读性也大大提高了。 ✔️switch 模式匹配 基于 instanceof 模式匹配这个特性我们可以使用如下方式来对对象o进行处理 static String formatter(Object o) {String formatted unknown;if (o instanceof Integer i) {formatted String.format(int %di);} else if (o instanceof Long l) {formatted String.format(long %dl);} else if (o instanceof Double d) {formatted String.format(double %fd);} else if (o instanceof String s) {formatted String.format(string %ss);}return formatted ;
}可以看到这里使用了很多 if-else 其实Java中给我们提供了一个多路比较的工具那就是switch而且从Java 14开始支持switch表达式但switch的功能一直都是非常有限的。 在Java 17中Java的工程师们扩展了switch语句和表达式使其可以适用于任何类型并允许case标签中不仅带有变量还能带有模式匹配。我们就可以更清楚、更可靠地重写上述代码例如: static String formatterPatternSwitch(Object o) {return switch (o) {case Integer i - String.format(int %d, i);case Long l - String.format(long %dl);case Double d - String.format(double %f,d);case String s - String.format(string %ss);default - o.tostring();};
}可以看到以上的switch处理的是一个 Object 类型而且 case 中也不再是精确的值匹配而是模式匹配了。 ✅✔️虚拟线程
。。。。。。。。。。这块会以一个新模块细讲大家元旦快乐