java的jdk9新特性:模块化系统

Java 9模块

我们将研究有关Java 9模块系统的以下主题。

  1. 介绍
  2. Java SE 9:拼图项目
  3. 当前的Java系统有问题吗?
  4. Java SE 9模块系统的优点
  5. 比较JDK 8和JDK 9
  6. 什么是Java 9模块?
  7. Java 9模块系统之母
  8. 比较Java 8和Java 9应用程序

介绍

甲骨文公司已将Java 9版本从2017年3月推迟到20179月

众所周知,Java SE 8具有三大新功能(以及一些其他增强功能和新功能)。

  1. Lambda表达式
  2. 流API
  3. 日期API

同样,Java SE 9具有三个主要功能(以及一些其他增强功能和新功能):

  1. Java模块系统(拼图项目)
  2. Java REPL
  3. 铣削项目硬币

在本文中,我们将讨论Oracle Jigsaw项目的基础知识。

Java SE 9:拼图项目

拼图项目将引入Java SE 9的全新概念:Java模块系统

这是Oracle Corp在Java SE 9版本中非常重要的项目。最初,他们作为Java SE 7 Release的一部分启动了该项目。但是,由于进行了很大的更改,它被推迟到Java SE 8,然后又被推迟了。现在它将与Java SE 9一起在2017年9月发布。

拼图项目的主要目标:

  • 模块化JDK

  • 众所周知,当前的JDK系统太大。因此,他们决定将JDK本身划分为小模块,以获得许多好处(我们将在接下来的部分中很快讨论它们)。

  • 模块化源代码

  • 当前的源代码jar文件太大,尤其是rt.jar太大了。因此,他们打算将Java源代码分成较小的模块。

  • 模块化运行时映像

  • 此功能的主要目标是“重组JDK和JRE运行时映像以容纳模块”。

  • 封装大多数内部API

  • 此功能的主要目标是“默认情况下使大多数JDK的内部API不可访问,但保留一些关键的,广泛使用的内部API”。

  • Java平台模块系统

  • 此功能的主要目标是“允许用户创建其模块以开发其应用程序”。

  • jlink:Java链接器

  • 该jlink工具的主要目标是“允许用户创建其应用程序的可执行文件”。

如果您不清楚这些事情,请不要担心。我们将在接下来的部分以及我的后续文章中用一些有用的示例深入讨论这些概念。

当前的Java系统有问题吗?

在本节中,我们将讨论“为什么需要Java SE 9模块系统”,这意味着当前Java系统存在的问题。

Java SE 8或更早的系统在开发或交付基于Java的应用程序时存在以下问题。

  • 由于JDK太大,要缩小到小型设备有点困难。Java SE 8引入了三种类型的压缩概要文件来解决此问题:compact1,compact2和compact3。但是它不能解决这个问题。
  • rt.jar等JAR文件太大,无法在小型设备和应用程序中使用。
  • 由于JDK太大,我们的应用程序或设备无法支持更好的性能。
  • 当前的Java系统中没有强封装,因为“公共”访问修饰符太开放了。每个人都可以访问它。
  • 由于JDK,JRE太大,因此很难测试和维护应用程序。
  • 由于公众过于开放,他们不应该避免访问某些内部非关键API,例如sun。。internal。*等。
  • 由于用户也可以访问内部API,因此安全性也是一个大问题。
  • 应用程序太大。
  • 支持组件之间的较少耦合有点困难。

为了解决所有这些问题,Oracle Corp将在Java SE 9 Release中发布Java Module系统。

Java SE 9模块系统的优点

Java SE 9 Module System将提供以下好处

  • 由于Java SE 9将把JDK,JRE,JAR等分成较小的模块,因此我们可以使用所需的任何模块。因此,将Java应用程序缩减到小型设备非常容易。
  • 易于测试和可维护性。
  • 支持更好的性能。
  • 由于public不仅是public,它还支持非常强的封装。(不要担心它是一个大概念。我们将通过一些有用的示例对其进行探讨)。
  • 我们不能再访问内部非关键API。
  • 模块可以非常安全地隐藏不必要的内部细节,我们可以获得更好的安全性。
  • 应用程序太小,因为我们只能使用所需的模块。
  • 它易于支持组件之间的较少耦合。
  • 它易于支持单一职责原则(SRP)。

我们将很快一一探讨所有这些概念。

比较JDK 8和JDK 9

我们知道JDK软件包含的内容。安装JDK 8软件后,我们可以在Java Home文件夹中看到几个目录,例如bin,jre,lib等。

但是,Oracle Corp对该文件夹结构的更改有些不同,如下所示。

java的jdk9新特性:模块化系统JDK 8文件夹结构:

java的jdk9新特性:模块化系统

JDK 9文件夹结构:

java的jdk9新特性:模块化系统

这里的JDK 9不包含JRE。在JDK 9中,JRE分为一个单独的分发文件夹。JDK 9软件包含一个新文件夹“ jmods”。它包含一组Java 9模块,如下所示。

在JDK 9中,没有rt.jar和没有tools.jar

java的jdk9新特性:模块化系统

注意:-
截至今天,“ jmods”包含95个模块。在最终版本中可能会增加。
$ {JAVA_HOME} / jmods中有“ jmods”文件夹。这些被称为JDK模块。

什么是Java 9模块?

模块是代码,数据和一些资源的自描述集合。它是一组与代码,数据和资源相关的包,类型(类,抽象类,接口等)。

每个模块仅包含一组相关的代码和数据,以支持单一职责(功能)原则(SRP)。

java的jdk9新特性:模块化系统

Java 9模块系统的主要目标是支持Java 模块化编程

在我的后续文章中,我们将讨论“什么是模块描述符”和“如何开发Java模块”。

Java 9模块系统之母

到目前为止,Java 9 Module System在Early Access JDK中具有95个模块。Oracle Corp已将JDK jar和Java SE规范分为两组模块。

  • 所有JDK模块均以“ jdk。*”开头
  • 所有Java SE规范模块均以“ java。*”开头

Java 9模块系统具有一个**“ java.base”模块**。它被称为基本模块。它是一个独立模块,不依赖于任何其他模块。默认情况下,所有其他模块都依赖于此模块。

这就是“ java.base”模块也被称为Java 9模块之母的原因。

它是所有JDK模块和用户定义模块的默认模块。

比较Java 8和Java 9应用程序

我们已经使用Java 5、6、7或8开发了许多Java应用程序。我们知道Java 8或更早版本的应用程序的外观以及包含的内容。

简而言之,我在下图中描述了Java 8应用程序:

java的jdk9新特性:模块化系统

在Java 8或更早版本的应用程序中,*组件是Package。它将与类型相关的集合归为一组。它还包含一组资源。

Java 9应用程序与此没有太大区别。它刚刚引入了一个称为“模块”的新组件,该组件用于将一组相关的软件包分组为一组。还有一个模块描述符(“ module-info.java”)的新组件。而已。

该应用程序的其余部分与早期版本的应用程序相同,如下所示。

java的jdk9新特性:模块化系统

像Java 8应用程序将Packages作为*组件一样,Java 9应用程序将Module作为*组件。

注意:-
每个Java 9模块只有一个模块和一个模块描述符。与Java 8包不同,我们不能在一个模块中创建多个模块。

简而言之,我可以说Java 9模块包含以下主要组件:

  • 一个模块
  • 模块名称
  • 模块描述符
  • 套套
  • 类型和资源集

这里的资源可以是module-info.java(模块描述符)或任何其他属性或XML。

我们在这篇文章中讨论了太多的理论。我认为足以理解Java 9 Module系统的基础知识。在我的后续文章中,我们将开始一些基本的Module开发。在需要时,我将讨论更多的Theory概念或Java 9 Module System术语。

这就是“ Java 9模块系统简介”主题的全部内容。在我的后续文章中,我们将讨论更多Java SE 9模块系统概念。

如果您喜欢我的帖子或有任何问题/建议/类型错误,请给我评论。

感谢您阅读我的教程。

Java SE 9学习愉快!