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 9:最新版本的核心功能与特性】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
我一直在关注 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位网友表示赞同!