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那样更新后的功能已经可以使用,还有一些预览的特性,非常值得大家学习,了解.

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值