Java 9新特性
2019-04-19 14:35:46 0 举报
AI智能生成
登录查看完整内容
Java9新特性小结
作者其他创作
大纲/内容
使用模块(module)来清楚的描述组件之间的依赖关系,而不是jar;使用新的module-path来解决类路径(classpath)管理的不足。
提供了更强大的代码封装性:在Java 9 中,模块之间的关系被称为“可读性”(readability),实际代码中一个类型对于另外一个类型的调用被称为“可访问性“(accessablity),即private、默认、protected、public访问修饰符。可访问性的前提是可读性。因此public访问修饰符不再意味着具有可访问性了。
目标
h4 id=\"模块的访问控制\
2、声明模块间依赖关系requires 语句用于声明模块对另一个模块的依赖关系,其表达形式如下:requires <module>;requires transitive <module>;requires static <module>;requires transitive static <module>;其中的 static 修饰符表示在编译时的依赖是强制的,但在运行时是可选的;transitive 修饰符会导致依赖于当前模块的其他模块具有隐式依赖性(传递依赖)。
模块声明:增加一个module-info.java文件描述模块信息。模块声明中可以包含零个或多个模块语句。包括以下五种类型:1、(模块)导出语句(exports statement)2、(模块)打开语句(opens statement)3、(模块)导入语句(requires statement)4、(服务)使用语句(uses statement)5、(服务)提供语句(provides statement)
如 module test { exports com.example.test; requires main; }
模块化系统Jigsaw
1、增加since版本标识属性2、增加forRemoval属性,表示是否会在未来版本移除,默认为false
如@Deprecated(since = \"1.1\
增强@Deprecated注解
在 Java 8 接口中增加 default 与 static 方法的基础上又增加了 private 方法
接口的 private 方法
Java 8 及之前版本中 String __ = \"hello\"; 这样的标识符是合法的,但是 Java 9 开始就用不了了。
特殊标识符增加限制
无需在 try-with-resources 语句中声明一个新变量,直接使用即可;如果有多个变量,则用分号隔开
如:InputStreamReader reader = new InputStreamReader(System.in); OutputStreamWriter writer = new OutputStreamWriter(System.out); try (reader ; writer) { writer.write(reader.read()); } catch (Exception e) { e.printStackTrace(); }
改进 try-with-resources
支持匿名内部类,如 new HashMap<>() {}
钻石操作符<>的升级
语法
jdk.incubator.httpclient 的孵化器模块,将会在以后的发布版本中用来替换旧的HttpURLConnection API。其中不仅包含旧的 HttpURLConnection API 功能,另外还加入了对 HTTP/2 和 WebSocket 的支持。
引入HttpClient API
如List.of()、Set.of()、Map.of()方法创建不可变集合,也使集合初始化代码更简洁
新增集合工厂方法
为 java.util.Optional 添加了很多新的有用方法,Optional 可以直接转为 Stream
改进 Optional 类
实质是将Reactive Streams规范定义的4个接口引入,改了下包名
反应式流 ( Reactive Streams )
新增 java.lang.ProcessHandle 接口,用于对原生进程进行管理
进程API
新增 java.lang.System.Logger 接口,其默认实现是 java.util.logging相关API
平台日志API
新增 java.lang.invoke.VarHandle 类,以作为 java.util.cocurrent.automic 包 和 sun.misc.Unsafe 类某些功能的替代方案。
变量句柄 API
新增takeWhile(动态确定何时终止迭代)、dropWhile(跳过满足给定条件前的值)、ofNullable、iterate(新重载方法)方法
改进的 Stream API
内置了一个轻量级的JSON API
轻量级的 JSON API
定义多分辨率图像API,开发者可以很容易的操作和展示不同分辨率的图像了
多分辨率图像 API
ProcessHandle类还可以监视进程的活跃性并破坏进程。CompletableFuture 类的异步机制可以在 ProcessHandle.onExit 方法退出时执行操作
改进进程控制相关API
提供堆栈遍历API,允许轻松过滤和延迟访问堆栈跟踪中的信息。见 java.lang.StackWalker 类
增加堆栈遍历 API
由原来的 char 数组变成 byte 数组,目的是为了更节省存储空间,提高性能。同样地,StringBuilder 和 StringBuffer 底层也进行了改变,具体见 java.lang.AbstractStringBuilder 源码。
原理:基于ISO/latin1/Utf-16编码,latin1和ISO用一个byte标识,UTF-16用两个byte标识。Java 9会自动识别用哪个编码,当数据用到1byte,就会使用iSO或者latin1编码,当空间数据满足2byte的时候,自动使用utf-16编码,节省了很多空间。
String底层存储结构的变更
类库
Java语言的REPL,交互式命令行工具,并提供了相关API
1、简化简单程序的编写与运行,便于快速验证代码正确性。比如 System.out.println(\"Hello World\") 仅仅一行代码就可以实现Hello World的输出
2、可执行单个jshell脚本文件。将待执行的程序代码写到以.jsh为后缀名的文件中,使用jshell [filename]命令执行
jshell
它是将 module 进行打包的工具,帮助目标机器的部署。打包后的文件将非常精简。
jlink
工具
用于解决jar包版本冲突及兼容问题
多版本兼容jar
统一JVM日志记录
使用G1作为默认的垃圾收集器,弃用CMS垃圾收集器
JVM调优增强功能
1、Java 9中的Javadoc 支持在 API 文档中的进行搜索;2、输出的Javadoc文档兼容 HTML5 标准;3、每个 Javadoc 页面都包含有关 JDK 模块类或接口来源的信息。
改进的Javadoc
properties文件默认以UTF-8编码加载,Java 9以前是ISO-8859-1
国际化功能
png文件下载地址
Java 9新特性
0 条评论
回复 删除
下一页