Java 8이 출시된 지 3년이 넘은 다음 출시일인 2017년 7월이 다가오고 있습니다. Java 9의 모듈 시스템에 대해 들어보셨을 수도 있지만 이 새 버전에는 다른 많은 업데이트도 포함되어 있습니다. 다음은 Java 9에서 제공되는 9가지 흥미로운 새 기능입니다. 필요한 친구들은 참고로 참고할 수 있습니다.
이 기사에서는 모든 사람을 위한 특정 참조 및 학습 가치가 있는 Java 9의 9가지 새로운 기능을 주로 공유합니다. 자세한 소개를 살펴보겠습니다.
1. Java 플랫폼 수준의 모듈 시스템
Java 9의 정의 기능은 완전히 새로운 모듈 시스템입니다. 코드 기반이 커질수록 복잡하고 난해한 "스파게티 코드"를 생성할 가능성이 기하급수적으로 늘어납니다. 이때 두 가지 기본적인 문제에 직면해야 합니다. 코드를 실제로 캡슐화하기가 어렵고 시스템이 서로 다른 부분(즉, JAR 파일) 간의 종속성에 대한 명확한 개념을 갖고 있지 않습니다. 모든 공개 클래스는 클래스 경로 아래의 다른 공개 클래스에서 액세스할 수 있으며, 이로 인해 공개적으로 액세스할 수 없는 API를 실수로 사용할 수 있습니다. 또한 클래스 경로 자체에 문제가 있습니다. 필요한 모든 JAR이 이미 있는지 또는 중복 항목이 있는지 어떻게 알 수 있습니까? 모듈 시스템이 두 가지 문제를 모두 해결합니다.
모듈형 JAR 파일에는 추가 모듈 설명자가 포함되어 있습니다. 이 모듈 설명자에서 다른 모듈에 대한 종속성은 "requires"를 통해 표현됩니다. 또한 "exports" 문은 다른 모듈에서 액세스할 수 있는 패키지를 제어합니다. 내보내지 않은 모든 패키지는 기본적으로 모듈에 캡슐화됩니다. 다음은 "module-info.java" 파일에 있는 모듈 설명자의 예입니다.
module blog { exports com.pluralsight.blog; requires cms; }
다음과 같이 모듈을 표시할 수 있습니다.
참고: 두 모듈 모두 내보내지지 않으므로 캡슐화된 패키지를 포함합니다(주황색 방패를 사용하여 시각화). 우연히 이러한 패키지의 클래스를 사용하는 사람은 없습니다. Java 플랫폼 자체도 자체 모듈 시스템을 사용하여 모듈화되어 있습니다. JDK의 내부 클래스를 캡슐화하면 플랫폼이 더욱 안전해 지속적인 개선이 더 쉬워집니다.
2. 연결
명시적인 종속성이 있는 모듈과 모듈식 JDK를 사용하면 새로운 가능성이 나타납니다. 이제 애플리케이션 모듈은 다른 애플리케이션 모듈과 사용하는 JDK 모듈에 대한 종속성을 선언합니다. 이 정보를 사용하여 애플리케이션을 실행하는 데 필요한 모듈만 포함하는 최소 런타임 환경을 만드는 것은 어떨까요? 이는 Java 9의 새로운 jlink 도구를 사용하면 가능합니다. 완전히 로드된 JDK 설치 버전을 사용하지 않고도 애플리케이션에 최적화된 최소 런타임 이미지를 생성할 수 있습니다.
3. JShell: 대화형 Java REPL
많은다양한 언어이미 대화형프로그래밍 환경, Java가 이제 클럽에 합류했습니다. 콘솔에서 jshell을 시작하고 Java 코드 입력 및 실행을 직접 시작할 수 있습니다. jshell은 즉각적인 피드백을 제공하므로 API를 탐색하고 언어 기능을 시험해 볼 수 있는 훌륭한 도구입니다.
Java 정규 표현식 테스트는 jshell이 여러분의 삶을 어떻게 더 쉽게 만들어 줄 수 있는지 보여주는 훌륭한 예입니다. 대화형 쉘은 또한 훌륭한 교육 환경을 제공하고 생산성을 높일 수 있습니다. 여기에서 자세한 내용을 알아볼 수 있습니다. 사람들에게 Java 작성 방법을 가르치는 과정에서 "public static void main(String [] args)"라는 말도 안되는 설명은 더 이상 필요하지 않습니다.
4. 향상된 Javadoc
때로는 작은 것이 큰 차이를 만들 수 있습니다. 당신도 나와 같으며 올바른 Javadoc 페이지를 찾기 위해 Google을 사용하고 있습니까? 더 이상 필요하지 않습니다. Javadoc은 이제 API 문서 내에서 검색을 지원합니다. 또한 Javadoc 출력은 이제 HTML5 표준을 준수합니다. 또한 모든 Javadoc 페이지에는 JDK 모듈 클래스 소스 또는 인터페이스에 대한 정보가 포함되어 있습니다.
五、集合工厂方法
通常,您希望在代码中创建一个集合(例如,List 或 Set ),并直接用一些元素填充它。 实例化集合,几个 “add” 调用,使得代码重复。 Java 9,添加了几种集合工厂方法:
Set<Integer> ints = Set.of(1, 2, 3); List<String> strings = List.of("first", "second");
除了更短和更好阅读之外,这些方法也可以避免您选择特定的集合实现。 事实上,从工厂方法返回已放入数个元素的集合实现是高度优化的。这是可能的,因为它们是不可变的:在创建后,继续添加元素到这些集合会导致 “UnsupportedOperationException” 。
六、改进的 Stream API
长期以来,Stream API 都是 Java 标准库最好的改进之一。通过这套 API 可以在集合上建立用于转换的申明管道。在 Java 9 中它会变得更好。Stream 接口中添加了 4 个新的方法:dropWhile, takeWhile, ofNullable。还有个 iterate 方法的新重载方法,可以让你提供一个 Predicate (判断条件)来指定什么时候结束迭代:
IntStream.iterate(1, i -> i < 100, i -> i + 1).forEach(System.out::println);
第二个参数是一个 Lambda,它会在当前 IntStream 中的元素到达 100 的时候返回 true。因此这个简单的示例是向控制台打印 1 到 99。
除了对 Stream 本身的扩展,Optional 和 Stream 之间的结合也得到了改进。现在可以通过 Optional 的新方法 `stram` 将一个 Optional 对象转换为一个(可能是空的) Stream 对象:
Stream<Integer> s = Optional.of(1).stream();
在组合复杂的 Stream 管道时,将 Optional 转换为 Stream 非常有用。
七、私有接口方法
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"); } }
如果您使用默认方法开发 API ,那么私有接口方法可能有助于构建其实现。
八、HTTP/2
Java 9 中有新的方式来处理 HTTP 调用。这个迟到的特性用于代替老旧的 `HttpURLConnection` API,并提供对 WebSocket 和 HTTP/2 的支持。注意:新的 HttpClient API 在 Java 9 中以所谓的孵化器模块交付。也就是说,这套 API 不能保证 100% 完成。不过你可以在 Java 9 中开始使用这套 API:
HttpClient 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 的特性,比如流和服务端推送。
九、 多版本兼容 JAR
我们最后要来着重介绍的这个特性对于库的维护者而言是个特别好的消息。当一个新版本的 Java 出现的时候,你的库用户要花费数年时间才会切换到这个新的版本。这就意味着库得去向后兼容你想要支持的最老的 Java 版本 (许多情况下就是 Java 6 或者 7)。这实际上意味着未来的很长一段时间,你都不能在库中运用 Java 9 所提供的新特性。幸运的是,多版本兼容 JAR 功能能让你创建仅在特定版本的 Java 环境中运行库程序时选择使用的 class 版本:
multirelease.jar ├── META-INF │ └── versions │ └── 9 │ └── multirelease │ └── Helper.class ├── multirelease ├── Helper.class └── Main.class
在上述场景中, multirelease.jar 可以在 Java 9 中使用, 不过 Helper 这个类使用的不是顶层的 multirelease.Helper 这个 class, 而是处在“META-INF/versions/9”下面的这个。这是特别为 Java 9 准备的 class 版本,可以运用 Java 9 所提供的特性和库。同时,在早期的 Java 诸版本中使用这个 JAR 也是能运行的,因为较老版本的 Java 只会看到顶层的这个 Helper 类。
如你所见,Java 9 提供了一大堆或大或小的功能特性,你准备好了么?
요약
[관련 추천]
1. 특별 추천: "php 프로그래머 다운로드 "Toolbox" V0.1 버전
위 내용은 Java의 9가지 새로운 기능에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!