继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

JDK9新特性入门教程

回首忆惘然
关注TA
已关注
手记 379
粉丝 73
获赞 413
概述

本文详细介绍了JDK9新特性,包括模块化系统、新的API和工具、改进的集合框架等,旨在帮助开发者更好地理解和使用这些新功能。JDK9的引入标志着Java语言的一次重大更新,提供了更多强大的功能和改进。

引入JDK9

JDK9简介

Java Development Kit (JDK) 是Java编程语言的核心开发环境,包含Java运行时环境(JRE)以及Java开发者需要的各种工具。JDK 9是Oracle公司发布的一个重要版本,其版本号从先前的1.8变成了9.0,标志着Java语言的一次重大更新。JDK 9引入了许多新特性,包括模块化系统(Jigsaw项目)、新的API和工具、改进的集合框架等。

JDK9的安装与配置

安装JDK 9的过程与其他版本类似。按照以下步骤安装和配置JDK 9:

  1. 下载JDK 9
    访问Oracle官方网站,下载JDK 9的安装包。确保下载适用于你操作系统的版本。

  2. 安装JDK 9
    运行下载的安装文件,按照向导提示完成安装。默认安装路径一般为C:\Program Files\Java\jdk-9

  3. 配置环境变量
    安装完成后,需要配置环境变量以便在命令行中使用Java命令。

    • JAVA_HOME:设置为JDK的安装路径,例如C:\Program Files\Java\jdk-9
    • PATH:添加%JAVA_HOME%\bin到Path变量中。
  4. 验证安装
    打开命令行工具,输入java -version,如果输出版本信息,则说明安装成功。

JDK9与JDK8的区别概述

JDK 9与JDK 8相比,引入了许多新特性和改进。以下是一些主要的区别:

  • 模块系统:JDK 9引入了模块化系统,通过模块化来组织代码,提高代码的可维护性。
  • 新的API和工具:JDK 9提供了一些新的API和工具,如JShell。
  • 改进的集合框架:JDK 9对集合框架进行了改进,增加了一些有用的新特性。
  • 改进的反射支持:反射API进行了改进,支持更灵活的类加载和对象操作。
  • 改进的垃圾收集器:引入了新的垃圾收集器,如Shenandoah。
  • 移除了一些旧API:JDK 9移除了许多不再使用的旧API,使JDK更加精简。

模块系统(Jigsaw项目)简介

模块化的好处

模块化是指将大型软件系统划分成较小的、独立的模块,每个模块都负责系统的一部分功能。模块化的好处包括:

  • 可维护性:每个模块都有明确的职责,方便维护和扩展。
  • 可重用性:模块可以被独立开发、测试和部署,便于重用。
  • 封装性:模块的内部实现细节对外部隐藏,提高了安全性。
  • 可测试性:模块化使得单元测试更加清晰和方便。
  • 独立性:模块之间相对独立,减少了依赖性。

以下是一个简单的模块化示例:

module com.example.myproject {
    requires java.base;
    requires java.logging;
    exports com.example.myproject;
}

如何创建和使用模块

在JDK 9中,可以通过创建模块来利用模块化系统。模块化系统使用module-info.java文件来定义模块的名称、依赖关系和其他属性。

创建一个新的模块,步骤如下:

  1. 创建一个新的Java项目
    在IDE(如Eclipse或IntelliJ IDEA)中创建一个新的Java项目,并在项目的源代码目录下创建一个新的Java文件module-info.java

  2. 定义模块信息
    module-info.java中定义模块的名称和依赖关系。例如:

    module com.example.myproject {
       requires java.base;
       requires java.logging;
       exports com.example.myproject;
    }

    在这个例子中,模块名称为com.example.myproject,依赖于java.basejava.logging模块,并导出com.example.myproject包。

  3. 编写模块代码
    在项目的其他Java文件中编写实际的功能代码。

  4. 编译和运行模块
    使用javac命令编译模块,并使用java命令运行模块。例如:

    javac --module-source-path src -d mods src/com/example/myproject/module-info.java src/com/example/myproject/*.java
    java --module-path mods --module com.example.myproject

模块声明与依赖管理

模块声明通常在module-info.java文件中进行。模块声明包括模块名称、依赖关系和其他属性。例如:

module com.example.myproject {
    // 模块名称
    requires java.base;
    // 依赖模块
    requires java.logging;
    // 导出包
    exports com.example.myproject;
    // 导入包
    uses com.example.myproject.service.MyService;
    // 提供包
    provides com.example.myproject.service.MyService with com.example.myproject.service.impl.MyServiceImpl;
}

使用requires声明模块需要的依赖模块,使用exports声明模块导出的包,使用usesprovides声明服务和实现。

移动平台支持

Java在移动设备上的应用

Java最初是为桌面和服务器端编程设计的,但随着移动设备的兴起,Java也逐渐应用到了移动设备上。JDK 9为移动设备提供了更好的支持,可以在Android设备上运行Java代码。

以下是在Android设备上使用Java的示例:

javac -source 1.8 -target 1.8 -bootclasspath /path/to/android/sdk/platforms/android-28/android.jar -d classes src/*.java
jar cvf MyApplication.jar -C classes .
adb push MyApplication.jar /data/local/tmp
adb shell cd /data/local/tmp && java -jar MyApplication.jar

如何使用JDK9为移动设备编写代码

为了在移动设备上编译和运行Java代码,可以使用JDK 9的嵌入式Java开发工具。以下是使用JDK 9为移动设备编写代码的基本步骤:

  1. 创建一个Java项目
    使用IDE创建一个新的Java项目,并编写相应的Java代码。

  2. 配置项目为移动设备
    在项目的构建配置中,指定目标平台为移动设备。例如,在Maven项目中,可以在pom.xml文件中添加特定的依赖和配置。

  3. 编译代码
    使用JDK 9提供的工具编译代码。例如,使用javac命令编译Java文件:

    javac -source 1.8 -target 1.8 -bootclasspath /path/to/android/sdk/platforms/android-28/android.jar -d classes src/*.java

    其中,-source 1.8-target 1.8用于指定Java版本,-bootclasspath指定Android SDK中的平台类库。

  4. 打包应用
    使用jar命令将编译后的类文件打包成一个可执行的JAR文件。例如:

    jar cvf MyApplication.jar -C classes .
  5. 在移动设备上运行
    将JAR文件传输到移动设备上,并使用java命令运行。例如,在Android设备上可以使用adb命令运行Java代码。

新的API和工具

新增的API介绍

JDK 9引入了许多新的API,这些API为开发者提供了更多的功能和便利。以下是一些主要的新增API:

  • Process API改进

    • ProcessHandle类提供了一个新的接口来处理子进程,例如获取子进程的PID、状态等信息。
    • ProcessHandle可以用于监控和管理进程,例如:
    ProcessHandle allProcesses = ProcessHandle.allProcesses();
    allProcesses.forEach(p -> System.out.println(p.info().pid()));
  • Socket API改进

    • SocketOption接口和相关类提供了一些新的Socket选项,例如StandardSocketOptions
    • 使用新的Socket选项可以更灵活地配置Socket连接:
    Socket socket = new Socket();
    socket.setOption(StandardSocketOptions.TCP_NODELAY, true);
  • 新的集合工具

    • java.util.Streamjava.util.Optional提供了更强大的集合操作功能。
    • Stream可以用于高效地处理集合数据:
    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
    int sum = numbers.stream().map(n -> n * n).filter(n -> n % 2 == 0).reduce(0, Integer::sum);

常用工具的更新与使用

JDK 9还改进了常用工具的功能,例如jpsjstat等。以下是常用工具的更新和使用示例:

  • jps

    • jps工具用于显示当前Java进程的状态。
    • 使用jps工具可以查看运行中的Java进程:
    jps
  • jstat

    • jstat工具用于监控Java进程的内存使用情况。
    • 使用jstat工具可以查看内存使用情况:
    jstat -gc <pid>
  • jcmd

    • jcmd工具提供了更多的命令来监控和管理Java进程。
    • 使用jcmd工具可以执行各种命令:
    jcmd <pid> GC.class_histogram

JShell工具简要介绍与使用示例

JShell是JDK 9引入的一个新的交互式命令行工具,旨在提供一个更方便的环境来测试和运行Java代码。以下是JShell的基本使用示例:

  1. 启动JShell
    在命令行中输入jshell命令启动JShell:

    jshell
  2. 定义变量和方法
    在JShell中可以直接定义变量和方法。例如:

    int x = 10;
    int y = 20;
    int sum = x + y;
    System.out.println(sum);
  3. 导入类和包
    在JShell中可以导入类和包来使用提供的方法。例如:

    import java.util.List;
    List<String> list = List.of("a", "b", "c");
    list.forEach(System.out::println);
  4. 查看帮助和历史记录
    使用/help命令查看可用的命令和选项,使用/history命令查看历史记录:

    /help
    /history

改进的集合框架

新增的集合类介绍

JDK 9对集合框架进行了一些改进,引入了一些新的集合类。以下是一些主要的新增集合类:

  • ListSet的改进

    • 新增了一些方法用于更灵活地操作ListSet
    • 例如,ListSetof方法可以用于创建不可变的集合:
    List<String> list = List.of("a", "b", "c");
    Set<String> set = Set.of("a", "b", "c");
  • Map的改进

    • Map接口引入了一些新的方法,例如ofofEntries等。
    • 使用新的Map方法可以创建不可变的映射:
    Map<String, Integer> map = Map.of("a", 1, "b", 2, "c", 3);

集合框架增强功能详解

JDK 9增强了集合框架的功能,使得集合操作更加灵活和高效。以下是集合框架的一些增强功能:

  • ListSet的增强

    • 新增了一些方法,例如List.copyOfSet.copyOf用于创建不可变的集合:
    List<String> immutableList = List.copyOf(List.of("a", "b", "c"));
    Set<String> immutableSet = Set.copyOf(Set.of("a", "b", "c"));
  • Map的增强

    • Map引入了一些新方法,例如Map.copyOf用于创建不可变的映射:
    Map<String, Integer> immutableMap = Map.copyOf(Map.of("a", 1, "b", 2, "c", 3));
  • Optional的增强

    • Optional提供了更多的方法,例如ofNullablestream等:
    Optional<String> optional = Optional.ofNullable("Hello");
    optional.ifPresent(System.out::println);

其他新特性介绍

其他值得关注的新特性

JDK 9引入了许多其他新特性,这些特性对于开发者来说同样重要。以下是一些值得关注的新特性:

  • HTTP/2 Client API

    • 提供了一个新的HTTP/2客户端API,可以用于构建HTTP/2客户端。
    • 使用新的HTTP/2客户端API可以更高效地处理HTTP请求:
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("http://example.com"))
        .build();
    client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
        .thenApply(HttpResponse::body)
        .thenAccept(System.out::println)
        .join();
  • 改进的反射支持

    • 反射API进行了改进,支持更灵活的类加载和对象操作。
    • 使用新的反射API可以更方便地处理类和对象:
    Method[] methods = Class.forName("com.example.MyClass").getDeclaredMethods();
    for (Method method : methods) {
        System.out.println(method.getName());
    }
  • 改进的集合工厂方法

    • 提供了一些新的工厂方法,例如List.ofSet.ofMap.of等。
    • 使用新的工厂方法可以创建不可变的集合:
    List<String> list = List.of("a", "b", "c");
    Set<String> set = Set.of("a", "b", "c");
    Map<String, Integer> map = Map.of("a", 1, "b", 2, "c", 3);

如何将新特性应用于实际项目中

将JDK 9的新特性应用于实际项目中,可以提高代码的可维护性、性能和扩展性。以下是一些建议:

  1. 模块化设计
    使用模块化系统将代码划分为独立的模块,提高代码的可维护性和重用性。

    • 例如,定义模块的依赖关系和导出的包:

      module com.example.myproject {
       requires java.base;
       requires java.logging;
       exports com.example.myproject;
      }
  2. 新的API和工具
    利用新的API和工具,提高代码的效率和灵活性。

    • 例如,使用新的Stream API处理集合数据:

      List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
      int sum = numbers.stream().map(n -> n * n).filter(n -> n % 2 == 0).reduce(0, Integer::sum);
  3. HTTP/2客户端
    使用HTTP/2客户端API构建更高效的HTTP客户端。

    • 例如,使用新的HTTP/2客户端API发送HTTP请求:

      HttpClient client = HttpClient.newHttpClient();
      HttpRequest request = HttpRequest.newBuilder()
       .uri(URI.create("http://example.com"))
       .build();
      client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
       .thenApply(HttpResponse::body)
       .thenAccept(System.out::println)
       .join();

通过以上步骤,可以将JDK 9的新特性应用到实际项目中,提高代码的质量和性能。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP