17日JDK 14 正式发布了,有些特性值得关注
2020/3/19 11:02:04
本文主要是介绍17日JDK 14 正式发布了,有些特性值得关注,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
2020年3月17日JDK 14 正式发布了,其中还是有一些值得关注的新特性。如果你觉得我写的东西对于您有帮助,希望得到您的关注!
一、instanceof的模式匹配:
Instanceof是java中用于检查对象引用是否为给定Type类型的实例,并返回布尔值。在Java 14之前,我们在完成判断之后,经常需要做一下类型的强制转换,如下:
if (obj instanceof String) { String str = (String) obj; // 需要强转 .. str.contains(..) .. }else{ str = .... }复制代码
Java 14增强功能特性:
if (!(obj instanceof String str)) { .. str.contains(..) .. // 不再需要转换代码,实际发生了转换 } else { .. str.... }复制代码
更多示例:
if (obj instanceof String str && str.length() > 5) {.. str.contains(..) ..} if (obj instanceof String str || str.length() > 5) {.. str.contains(..) ..}复制代码
注意:仅当object不为null时,instanceOf才会匹配,然后仅将其分配给str。在instanceof中使用模式匹配可以减少Java程序中显式强制转换的数量。
二、NullPointerExceptions(注意带s)
在java 14之前,我们经常在调试代码的时候,发现一行代码中有多个对象,抛出异常之后你也无法确定到底是哪个对象为null。假设此代码中出现一个NullPointerException:
a.b.c.i = 99; //下面是异常信息 Exception in thread "main" java.lang.NullPointerException at Prog.main(Prog.java:5)复制代码
文件名和行号不能精确指出哪个变量为空。是a还是b或c?JDK14对此做了改进。
Exception in thread "main" java.lang.NullPointerException: Cannot read field 'c' because 'a.b' is null. at Prog.main(Prog.java:5) 复制代码
但是,这也存在一些风险。空指针异常消息包含源代码中的变量名。暴露此信息可能被视为程序的安全风险。
三、switch表达式
在Java 14之前*
switch (day) { case MONDAY: case FRIDAY: case SUNDAY: System.out.println(6); break; case TUESDAY: System.out.println(7); break; case THURSDAY: case SATURDAY: System.out.println(8); break; case WEDNESDAY: System.out.println(9); break; }复制代码
Java 14增强功能
switch (day) { case MONDAY, FRIDAY, SUNDAY -> System.out.println(6); case TUESDAY -> System.out.println(7); case THURSDAY, SATURDAY -> System.out.println(8); case WEDNESDAY -> System.out.println(9); }复制代码
四、record
Java 14使用record关键字来减少类声明语法,这有点像lombok。我们有时候需要编写许多低价值的重复代码来实现一个简单的数据载体类:构造函数,访问器,equals(),hashCode(),toString()等。为了避免这种重复代码,Java 14推出record。 java14之前的代码:
final class Point { public final int x; public final int y; public Point(int x, int y) { this.x = x; this.y = y; } // 很多的equals, hashCode, toString,getters、setters }复制代码
Java 14中就用这一行代码
record Point(int x, int y) { }复制代码
五、文本块
在Java中,要将HTML,XML,SQL或JSON代码片段嵌入到代码中通常很难阅读,为了克服此问题,Java 14引入了Text Block。 java14之前,没有文本块的HTML示例
String html = "<html>\n" + " <body>\n" + " <p>Hello, world</p>\n" + " </body>\n" + "</html>\n";复制代码
java14,带文本块的HTML示例,下面的代码看上去是多行的,实际上字符串的拼接结果仍然是一行的。
String html = """ <html> <body> <p>Hello, world</p> </body> </html> """;复制代码
如果你希望字符串中有换行,在每行的行尾加上“\”,这样字符串就是换行的了,可以打印出来看一下。
String html = """ <html> \ <body> \ <p>Hello, world</p> \ </body> \ </html> """;复制代码
欢迎关注我的博客,里面有很多精品合集
- 本文转载注明出处(必须带连接,不能只转文字):字母哥博客。
这篇关于17日JDK 14 正式发布了,有些特性值得关注的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-26大厂数据结构与算法教程:入门级详解
- 2024-12-26大厂算法与数据结构教程:新手入门指南
- 2024-12-26Python编程入门指南
- 2024-12-26数据结构高级教程:新手入门及初级提升指南
- 2024-12-26并查集入门教程:从零开始学会并查集
- 2024-12-26大厂数据结构与算法入门指南
- 2024-12-26大厂算法与数据结构入门教程
- 2024-12-26二叉树入门教程:轻松掌握基础概念与操作
- 2024-12-26初学者指南:轻松掌握链表
- 2024-12-26平衡树入门教程:轻松理解与应用