17日JDK 14 正式发布了,有些特性值得关注
2020-03-19 16:05:54来源:博客园 阅读 ()
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 = """
Hello, world
""";
~~~
欢迎关注我的博客,里面有很多精品合集
- 本文转载注明出处(必须带连接,不能只转文字):字母哥博客。
原文链接:https://www.cnblogs.com/zimug/p/12522433.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- jdk各个版本下载 2020-06-11
- JDK8的JVM内存模型小结 2020-06-03
- JDK1.7和1.8的HashMap对比详解 2020-06-02
- 当IntelliJ IDEA2020.1遇上JDK14:所有美好环环相扣 2020-06-01
- JDK动态代理 2020-05-29
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash