欢迎来真孝善网,为您提供真孝善正能量书籍故事!

深入解析Java 9:最新版本的核心功能与特性

时间:11-12 神话故事 提交错误

REPL (JShell):交互式编程环境。

HTTP 2 客户端:HTTP/2 标准是HTTP 协议的最新版本。新的HTTPClient API 支持WebSocket 和HTTP2 流媒体和服务器推送功能。

改进的Javadoc:Javadoc 现在支持在API 文档中搜索。此外,Javadoc 输出现在符合HTML5 标准。

多版本兼容JAR包:多版本兼容JAR功能允许您创建仅在特定版本的Java环境中运行库程序时使用的类版本。

集合工厂方法:在List、Set 和Map 接口中,新的静态工厂方法可以创建这些集合的不可变实例。

私有接口方法:在接口中使用私有方法。我们可以使用private 访问修饰符在接口中编写私有方法。

进程API: 改进的API 用于控制和管理操作系统进程。 java.lang.ProcessHandle及其嵌套接口Info的引入,让开发者摆脱了必须使用本地代码获取本地进程PID的困境。

改进的Stream API:改进的Stream API 添加了方便的方法,使流处理和使用收集器编写复杂的查询变得更容易。

改进的try-with-resources:如果您已经拥有一个最终的或相当于最终变量的资源,则可以在try-with-resources 语句中使用该变量,而无需在try-with-resources 语句中声明新变量。

改进的弃用注解@Deprecated:注解@Deprecated可以标记Java API状态,可以表明标记的API将被删除或已被销毁。

改进的Diamond Operator:匿名类可以使用Diamond Operator。

改进的Optional类:java.util.Optional添加了许多新的有用方法,Optional可以直接转换为流。

多分辨率图像API:定义多分辨率图像API,以便开发者可以方便地操作和显示不同分辨率的图像。

改进的CompletableFuture API:CompletableFuture类的异步机制可以在ProcessHandle.onExit方法退出时执行操作。

轻量级JSON API:内置轻量级JSON API。

反应式流API: Java 9 引入了新的反应式流API 来支持Java 9 中的反应式编程。

1、模块系统:

模块是代码和数据的包。模块的代码被组织成多个包,每个包包含Java类和接口;模块的数据包括资源文件和其他静态信息。 Java 9 模块的一个重要特性是在其工件的根目录中包含一个描述模块的module-info.class 文件。工件的格式可以是传统的JAR 文件,也可以是Java 9 中新增的JMOD 文件。该文件是从根目录中的源代码文件module-info.java 编译而来的。模块声明文件可以描述模块的不同特性。

//在module-info.java文件中,可以使用new关键字module来声明一个模块: module com.module {.}

//在src同级目录下创建mods文件夹,然后在该目录下创建com.runoob.greetings文件夹,并将模块编译到该目录下。

2.REPL(JShell):

JShell 是Java 9 中添加的新的交互式编程环境工具。它允许您在不使用类或方法包装器的情况下执行Java 语句。它类似于Python解释器,允许您直接输入表达式并查看其执行结果。

3.javadoc工具:

可以生成Java文档,并且Java 9的javadoc的输出现在与HTML5标准兼容。

4.多版本兼容JAR包:

使用多版本兼容JAR功能,从java文件生成两个版本的jar包,一个是jdk 7,一个是jdk 9,然后在不同的环境中执行。

5.集合工厂方法:

在Java 9 List、Set 和Map 接口中,新的静态工厂方法可以创建这些集合的不可变实例。

//List和Set接口,of(.)方法重载了0~10个参数的不同方法。

//Map接口,of(.)方法重载了0~10个参数的不同方法。

//如果Map接口的参数超过10个,可以使用ofEntries(.)方法。

6.私有接口方法:

在Java 8 之前,接口可以具有常量变量和抽象方法。接口中不能提供方法实现。如果要提供抽象方法和非抽象方法(方法和实现)的组合,则必须使用抽象类。

Java 8 接口中引入了一些新功能—— 个默认方法和静态方法。我们可以在Java SE 8 接口中编写方法实现,并只使用default 关键字来定义它们。

Java 9不仅像Java 8一样支持接口默认方法,还支持私有方法。

7.改进的流程API:

在Java 9 之前,Process API 仍然缺乏对使用本地进程的基本支持。

Java 9 在Process API 中添加了一个名为ProcessHandle 的接口来增强java.lang.Process 类。

ProcessHandle接口的实例标识本地进程,允许查询进程状态和管理进程。

ProcessHandle嵌套接口Info让开发者摆脱了必须使用本地代码获取本地进程PID的困境。

ProcessHandle 接口中声明的onExit() 方法可用于在进程终止时触发某些操作。

8.改进的流API:

Java 9 向Stream 添加了几个新方法:dropWhile、takeWhile、ofNullable 以及iterate 方法的新重载方法。

takeWhile() 方法采用断言作为参数,并返回给定Stream 的子集,直到断言语句第一次返回false。如果第一个值不满足断言条件,将返回一个空Stream。

有序Stream中的takeWhile()方法,takeWhile从头开始返回尽可能多的元素;在无序Stream 中,takeWhile 返回从头开始满足Predicate 要求的元素子集。

Stream.of("a","b","c","","e","f").takeWhile(s-!s.isEmpty()).forEach(System.out:print);//touch当到达空字符串时停止循环输出。

Stream.of("a","b","c","","e","f").dropWhile(s-!s.isEmpty()).forEach(System.out:print);//触摸当到达空字符串时开始循环输出

count=Stream.ofNullable(null).count();//空元素返回空流,输出0。非空元素获取一个元素,生成单个元素流。

9. 改进了资源尝试:

try-with-resources 是JDK 7 中新的异常处理机制,可以轻松关闭try-catch 语句块中使用的资源。

try-with-resources 声明在JDK 9 中得到了改进。如果已经有一个资源是Final 或相当于Final 变量,则可以在try-with-resources 语句中使用该变量,而无需在尝试使用资源语句。

10. @Deprecated (since=""/forRemoval="")

标记Java API 状态,可以是以下内容:

使用它是有风险的,可能会导致错误

未来版本可能不兼容

可能会在未来版本中删除

一个更好、更有效的方案已经取代了它。

Java 9 中的注释中添加了两个新元素:since 和forRemoval。

since: 元素指定带注释的API 元素的已弃用版本。

forRemoval: 元素表示带注释的API 元素将在未来版本中删除,并且应迁移API。

11.钻石运营商:

Java 7中引入,可以使代码更具可读性,但不能用于匿名内部类。

在Java 9中,可以与匿名内部类一起使用。

12.改进可选类:

在Java 9 中,添加了三个方法来改进其功能:stream()、ifPresentOrElse() 或or()。

Stream方法的作用是将Optional转换为Stream。如果Optional包含一个值,则返回包含该值的Stream,否则返回一个空Stream(Stream.empty())。

//语法public Streamstream()

ifPresentOrElse方法的改进是增加了else,它接受两个参数Consumer和Runnable。 ifPresentOrElse方法的目的是,如果一个Optional包含值,则对其包含的值调用函数action,即action.accept(value),这与ifPresent一致;与ifPresent方法的区别在于,ifPresentOrElse还有第二个参数emptyAction —— 如果Optional不包含值,ifPresentOrElse会调用emptyAction,emptyAction.run()。

//语法public void ifPresentOrElse(Consumer? super Taction, Runnable emptyAction)

or()方法如果Optional指定的值存在则返回该值,否则返回默认值。

//语法publicOptionalor(Supplier?extendsOptional?extendsTsupplier)

13.多分辨率图像API:

Image getResolutionVariant(double destImageWidth, double destImageHeight) 获取特定分辨率的图像变体- 表示具有已知分辨率单位DPI 的特定尺寸的逻辑图像,并且该图像是最佳变体。

//根据不同尺寸获取对应的图像分辨率Imagevariant1=multiResolutionImage.getResolutionVariant(156, 45);

System.out.printf("n目标图像[%d,%d]: [%d,%d]",

156、45、variant1.getWidth(null)、variant1.getHeight(null));

ListgetResolutionVariants() 返回具有可读分辨率的图像变体列表。

Listvariants=multiResolutionImage.getResolutionVariants();

System.out.println("图片总数:"+variants.size());

用户评论

如梦初醒

我一直在关注 Java 开发,这几年更新蛮多的!

    有11位网友表示赞同!

你的眸中有星辰

Java9 的新特性,是不是又更方便写代码了?

    有11位网友表示赞同!

孤岛晴空

想学习一下 JVM 的内部机制,Java 9 会有帮助吗?

    有10位网友表示赞同!

几妆痕

用过的朋友可以分享下,Java 9 使用体验如何?

    有12位网友表示赞同!

相知相惜

我还在用 Java 8,等我有时间再更新版本看看新特性。

    有19位网友表示赞同!

淡淡の清香

看起来 Java 的发展越来越厉害了,很多新功能能提高效率吧。

    有5位网友表示赞同!

眷恋

新版本的语言特征是什么?我比较想知道改进了哪些地方。

    有7位网友表示赞同!

▼遗忘那段似水年华

我在学习 java ,Java9 是最新的吗?

    有9位网友表示赞同!

权诈

有哪些新手教程介绍 Java 9 的用法?

    有20位网友表示赞同!

青瓷清茶倾城歌

学习了新特性,是不是能写出更高效的代码?

    有5位网友表示赞同!

龙吟凤

Java 常用来做什么项目呢?有没有新特性的应用领域?

    有12位网友表示赞同!

珠穆郎马疯@

Java9 的学习资源有哪些?我想了解具体的更新内容。

    有11位网友表示赞同!

北染陌人

Java 9 对旧项目有什么影响?需要全面升级吗?

    有19位网友表示赞同!

一尾流莺

对我这样的新手来说,Java9 比较难入门吗?

    有9位网友表示赞同!

弃我者亡

Java 的发展方向是怎样的? 未来会有什么新的变化?

    有11位网友表示赞同!

最怕挣扎

Java 9 的稳定性如何?使用起来方便吗?

    有12位网友表示赞同!

满心狼藉

我在想学习新特性,但时间有限怎么办?

    有9位网友表示赞同!

花菲

Java 和其他编程语言相比,优势有哪些?

    有5位网友表示赞同!

酒笙倾凉

学习 Java 容易上手吗?推荐一些入门教程。

    有6位网友表示赞同!

万象皆为过客

Java9 的学习难度如何?与之前的版本有什么区别?

    有19位网友表示赞同!

【深入解析Java 9:最新版本的核心功能与特性】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活