java9新特性总结
来源:互联网 发布:淘宝店怎么推广宣传 编辑:程序博客网 时间:2024/05/16 14:18
转载自:https://www.oschina.net/translate/java-9-new-features
原文:https://www.pluralsight.com/blog/software-development/java-9-new-features
整理和精简如下:
1. Java 平台级模块系统
Java 9 的定义功能是一套全新的模块系统。当代码库越来越大,创建复杂,盘根错节的“意大利面条式代码”的几率呈指数级的增长。这时候就得面对两个基础的问题: 很难真正地对代码进行封装, 而系统并没有对不同部分(也就是 JAR 文件)之间的依赖关系有个明确的概念。每一个公共类都可以被类路径之下任何其它的公共类所访问到, 这样就会导致无意中使用了并不想被公开访问的 API。此外,类路径本身也存在问题: 你怎么知晓所有需要的 JAR 都已经有了, 或者是不是会有重复的项呢? 模块系统把这俩个问题都给解决了。
模块化的 JAR 文件都包含一个额外的模块描述器。在这个模块描述器中, 对其它模块的依赖是通过 “requires” 来表示的。另外, “exports” 语句控制着哪些包是可以被其它模块访问到的。所有不被导出的包默认都封装在模块的里面。如下是一个模块描述器的示例,存在于 “module-info.java” 文件中:
module blog { exports com.pluralsight.blog; requires cms;}
2. JShell: 交互式 Java REPL
许多语言已经具有交互式编程环境,Java 现在加入了这个俱乐部。您可以从控制台启动 jshell ,并直接启动输入和执行 Java 代码。 jshell 的即时反馈使它成为探索 API 和尝试语言特性的好工具。
一个例子:
测试某个功能或使用的时候,不用再打开编辑器,然后写public static void main(String[] args)
,方便很多。
3. 集合工厂方法
通常,您希望在代码中创建一个集合(例如,List 或 Set ),并直接用一些元素填充它。 实例化集合,几个 “add” 调用,使得代码重复。 Java 9,添加了几种集合工厂方法:List.of
, Set.of
。这样构造集合就方便了很多。如:
4.私有接口方法
Java 8 为我们带来了接口的默认方法。 接口现在也可以包含行为,而不仅仅是方法签名。 但是,如果在接口上有几个默认方法,代码几乎相同,会发生什么情况? 通常,您将重构这些方法,调用一个可复用的私有方法。 但默认方法不能是私有的。 将复用代码创建为一个默认方法不是一个解决方案,因为该辅助方法会成为公共API的一部分。 使用 Java 9,您可以向接口添加私有辅助方法来解决此问题:
public interface MyInterface { void normalInterfaceMethod(); default void interfaceMethodWithDefault() { init(); } default void anotherDefaultMethod() { init(); } // This method is not part of the public API exposed by MyInterface private void init() { System.out.println("Initializing"); }}
5. HTTP/2
Java 9 中有新的方式来处理 HTTP 调用。这个迟到的特性用于代替老旧的 HttpURLConnection
API,并提供对 WebSocket 和 HTTP/2 的支持。注意:新的 HttpClient API 在 Java 9 中以所谓的孵化器模块交付。也就是说,这套 API 不能保证 100% 完成。不过你可以在 Java 9 中开始使用这套 API:
HjttpClient client = HttpClient.newHttpClient();HttpRequest req = HttpRequest.newBuilder(URI.create("http://www.google.com")) .header("User-Agent","Java") .GET() .build();HttpResponse<String> resp = client.send(req, HttpResponse.BodyHandler.asString());
除了这个简单的请求/响应模型之外,HttpClient 还提供了新的 API 来处理 HTTP/2 的特性,比如流和服务端推送。
- java9新特性总结
- Java9新特性介绍
- java9 新特性
- Java9新特性介绍
- Java9新特性
- java9新特性
- Java9 新特性
- Java9的新特性
- JAVA9新特性
- Java9 新特性
- Java9新特性调研
- java9 新特性
- 解读java9新特性
- Java9新特性
- Java9新特性
- Java9的新特性
- JAVA9新特性
- Java9中的新特性
- java8新特性总结
- 做了8年游戏开发的程序员对未来的忧虑
- HDU 2063 过山车
- EasyUI 控制面板
- 微信小程序之发送模板消息(通过openid推送消息给用户)
- java9新特性总结
- Oracle 11g 的卸载
- Qt中单个窗口中实现多个页面显示
- np.linspace() np.logspace() np.arange() 区别
- 如何封装AJAX请求,这样方便与后台做请求交互!
- OpenJudge 4017 爬楼梯(斐波那契数)
- EasyUI 布局面板
- 兄弟连学Python(6)—Python控制流初探
- leetcode 693. Binary Number with Alternating Bits