大家好,我是DD!

今天这个“不大不小”的前沿消息,你必须知道一下。

Java 18 正式发布_python

就在昨晚,Java官方宣布​Java 18​正式发布了!

Java 18 正式发布_人工智能_02

为什么说不大不小呢?说“不小”是因为毕竟Java正式版本发布嘛,大家必须知道下,最新版本到多少了,别被新来的实习生鄙视了。说“不大”是因为​Java 18​这个版本并非长期支持版本,接下来重点需要关注的依然是​Java 17​,因为接下来Java生态的各种框架都会以Java 17作为基线来构建,比如:Spring Boot 3.0,后续DD的教程(http://blog.didispace.com/spring-boot-learning-2x/)也会持续更新最新内容,所以大家要记得持续关注!

新特性

虽然Java 18并非长期支持版本,但下一个长期支持版本总是在之前版本上逐步发展的,所以先大致了解下这个版本的新功能,做到心里有数还是很有必要的。

JEP 400

将 UTF-8 指定为标准 Java API 的默认字符集。通过此更改,依赖于默认字符集的 API 将在所有实现、操作系统、语言环境和配置中保持一致。

JEP 408

Java​内部终于有原生的​Web​服务器了。但是请注意它没有可用的 ​CGI​ 或类似 ​Servlet​ 的功能。该工具可用于原型设计、临时编码和测试目的,尤其是在教育环境中。

它并不是​Jetty​、​Apache Tomcat​等产品的竞品,也无法而且不推荐在生产环境中使用。仅仅是提供一个命令行工具来辅助帮助开发人员设计、测试、教学。

我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧​点击加群​,享受一起成长的快乐。

JEP 413

支持在Java API文档中使用代码片段。以前在Java代码的注释中如果要写一些样例非常麻烦,甚至还要进行字符义。现在Java注释引入了一个新的标记  ​​@snippet​​ 来解决注释中包含代码片段样例的问题。

它可以内联使用:

/**
* The following code shows how to use {@code Optional.isPresent}:
* {@snippet :
* if (v.isPresent()) {
* System.out.println("v: " + v.get());
* }
* }
*/

也可以引用外部片段:

/**
* The following code shows how to use {@code Optional.isPresent}:
* {@snippet file="ShowOptional.java" region="example"}
*/

​ShowOptional.java​​就是引用的源代码:

public class ShowOptional {
void show(Optional<String> v) {
// @start region="example"
if (v.isPresent()) {
System.out.println("v: " + v.get());
}
// @end
}
}

JEP 417

引入一个 API 来表达向量计算,该计算可以在运行时可靠地编译为支持的 CPU 架构上的最佳向量指令,从而实现优于等效标量计算的性能。目前是第三次孵化。

JEP 418

为主机名和地址解析定义服务提供者接口 (SPI),以便**​​java.net.InetAddress​​**[2]可以使用平台内置解析器以外的解析器。这个对于互联网一些协议的接入提供了入口,同时你也可以对现有方案进行一些改进和定制。

JEP 419

Foreign Function & Memory API​ ( ​JEP 419​[3] ) 是此版本中实现的更重要的 JEP 之一,因为它是​Project Panama​[4]中包含的孵化组件之一。​Panama​ 正在简化将 Java 程序连接到非 ​Java​ 组件的过程。这一特殊功能在其第二次孵化迭代中引入了一个 ​API​,​Java​ 程序通过该 API 调用​Native​类库并处理​Native​数据。目的是取代设计的非常不理想的**Java Native Interface (JNI)**。

大家都知道其它语言有非常棒的一些类库,但是​Java​想调用其它语言的类库目前需要使用​JNI​。但是​JNI​被设计得太复杂了,让很多​Java​开发者难以上手。如果这一状况得到改变,那么利用Java去调用一些​C​或者​C++**音视频处理库和**Python​的机器学习库将是非常容易的事情。

我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧​点击加群​,享受一起成长的快乐。

JEP 420

实现的唯一真正影响 Java 语言的 JEP 是​Pattern Matching for switch​ ( ​JEP 420​[5] ),它在 Java 17 中首次预览(这是第二次预览)。​其目的是“通过对switch​ 表达式和语句的模式匹配以及对模式语言的扩展来增强 Java 编程语言 。在 Java 16 中,​JEP 394​[6]扩展了​​instanceof​​运算符以采用​类型模式​并执行​模式匹配​:

// Old code
if (o instanceof String) {
String s = (String)o;
... use s ...
}

// New code
if (o instanceof String s) {
... use s ...
}

我们使用​​instanceof​​后无需再对对象进行类型换就可以使用其真实的类型。

Java 14​又引入了​​switch​​表达式:

int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
default -> 11;
};

如果这两个能结合起来,​​switch​​能进行模式匹配的话,下面的句子将大大简化:

static String formatter(Object o) {
String formatted = "unknown";
if (o instanceof Integer i) {
formatted = String.format("int %d", i);
} else if (o instanceof Long l) {
formatted = String.format("long %d", l);
} else if (o instanceof Double d) {
formatted = String.format("double %f", d);
} else if (o instanceof String s) {
formatted = String.format("String %s", s);
}
return formatted;
}

JEP 420​的预览特性,将会把上面冗长的代码简化为:

static String formatterPatternSwitch(Object o) {
return switch (o) {
case Integer i -> String.format("int %d", i);
case Long l -> String.format("long %d", l);
case Double d -> String.format("double %f", d);
case String s -> String.format("String %s", s);
default -> o.toString();
};
}

是不是更加清晰了呢?

JEP 421

​Object​​​对象有一个​​finalize​​​方法,该方法用于实例被垃圾回收器回收的时触发的操作。当 GC (垃圾回收器) 确定不存在对该对象的有更多引用时,对象的垃圾回收器就会调用这个方法。当时它的设计用来避免内存泄露,现在已经有了更好的替代方案​​try-with-resources​​和​Java 9​引入的 ​​java.lang.ref.Cleaner​​。

因此,所有该方法会被标记为过时,未来将被移除。

最后,问一句你做好从 Java 8 到 Java 17 的准备了吗?还是已经开始有应用升级了呢?留言区说说呗~

------

我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧​点击加群​​,享受一起成长的快乐。另外,如果你最近想跳槽的话,年前我花了2周时间收集了一波大厂面经,节后准备跳槽的可以​​点击这里领取​​!

版权申明​:本文公众号「程序猿DD」原创。可规范载:完全复制全文不做删减、文首标明来源公众号与作者、文末放置来源公众号的卡片或二维码,并于本文发布24小时后发布;非规范转载、抄袭、洗稿一律投诉侵权。

··································

你好,我是程序猿DD,10年开发老司机、阿里云MVP、腾讯云TVP、出过书、创过业、国企4年互联网6年。10年前毕业加入宇宙行,工资不高、也不算太忙,业余坚持研究技术和做自己想做的东西。4年后离开国企,加入永辉互联网板块的创业团队,从开发、到架构、到合伙人。一路过来,给我最深的感受就是一定要不断学习并关注前沿。只要你能坚持下来,多思考、少抱怨、勤动手,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。如果你看好一个事情,一定是坚持了才能看到希望,而不是看到希望才去坚持。相信我,只要坚持下来,你一定比现在更好!如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯,帮你积累弯道超车的资本。