Java14新特性介绍

听说预发版于3月17号,都有哪些特性呢,先睹为快,下文主要为翻译内容的核心截取

特性

1,改进的switch表达式,第一次出现在Java 12和13中,在Java 14中获得了完全的支持
2,instanceof支持模式匹配(语言特性)
3,record 特性,省去写get,equals()等方法
4,NullPointerException(JVM特性),精确到哪一行
  • Switch表达式, 现在可以使用箭头 ->待代替,感觉跟Lambada表达式的箭头相似,lambada表达式可以了解一下
var log = switch (event) {
case PLAY -> "User has triggered the play button";
case STOP, PAUSE -> "User needs a break";
default -> {
String message = event.toString();
LocalDateTime now = LocalDateTime.now();
yield "Unknown event " + message +
" logged on " + now;
}
};
  • 文本块, 等号左右两边使用 “”", “”" 来开始并结束代码块,写起来真正像是用hbuilder在编写html,很方便
String html = """
<HTML>
<BODY>
<H1>"Java 14 is here!"</H1>
</BODY>
</HTML>""";
  • 新的转义字符 \s 代表第一个空格; \代表 避免在行尾插入换行字符(如果字符串过长,可以使用\让字符串可读性更强)
String text = """
Lorem ipsum dolor sit amet, consectetur adipiscing \
elit, sed do eiusmod tempor incididunt ut labore \
et dolore magna aliqua.\
""";
  • 预览特性: instanceof 模式匹配
以前的写法: 需要强制转换一下,转换过程可能出错
if (obj instanceof Person) {
	Person person = (Person)obj;
	System.out.println(person.getName())
}

现在的写法: 直接在括号中转换,代码量减少,这让我想起了使用Lombok来减少getter 与setter方法的输出,只在编译后的class文件中进行展示,代码量减少,可读性更强, 又或者使用GenerateAllSetter 在new 类的时候生成 属性的set方法,非常的方便
if (obj instanceof Person person) {
	System.out.println(person.getName())
}
  • 预览特性 Record, 有点类似 Lombok插件的@Data注解,使用方法一样,都是在源码中代码可读性更强,编译后的class文件中代码可读
Person 类,包含有  name, age, sex字段
常规的方法
class Person {
private String name,
private String age, 
private Integer sex,
getter
setter
空参
带参
equals()
toString()
hashcode()
}

使用Record后
public Record Person ( String name, String age, Integer sex){}
验证方法
javac --enable-preview --release 14 Person.java
record的字段隐含为final。因此,record的字段不能被重新赋值。但要注意的是,这并不代表整个record是不可变的,保存在字段中的对象可以是可变的。

  • NullPointerException
针对于这个错,我们调试起来很困难,甚至是表达式一点一点的调试,浪费时间严重
例子:  var name = user.getLocation().getCity().getName();
Exception in thread "main" java.lang.NullPointerException
at NullPointerExample.main(NullPointerExample.java:5)
Java14新特性中,,jvm的新特性
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Location.getCity()" because the return value of "User.getLocation()" is null
at NullPointerExample.main(NullPointerExample.java:5)
结果 : "Location.getCity() 无法调用
原因:User.getLocation()的返回值为null
增强版本的诊断信息只有在使用下述标志运行Java时才有效:
-XX:+ShowCodeDetailsInExceptionMessages
下面是个例子:
java -XX:+ShowCodeDetailsInExceptionMessages NullPointerExample
在以后的版本中,该选项可能会成为默认。
这项改进不仅对于方法调用有效,其他可能会导致NullPointerException的地方也有效,包括字段访问、数组访问、赋值等。

总结一下: Java14新特性,像switch那样更新后的功能已经可以使用,还有一些预览的特性,非常值得大家学习,了解.

关注博客,每日分享实用知识

发布了337 篇原创文章 · 获赞 105 · 访问量 44万+

猜你喜欢

转载自blog.csdn.net/qq_37022150/article/details/104965961