Java 9 模块是 Java 结构中最大的变化之一,在这里我要对Java 9 模块系统
进行简短的高级介绍。
Java 9 模块
我们将研究以下关于Java 9模块系统的主题。
1.介绍 2.Java SE 9:Jigsaw项目 3.当前Java系统的问题? 4.Java SE 9模块系统的优点 5.JDK 8和JDK 9的比较 6.Java 9模块是什么? 7.Java 9模块系统的母 8.Java 8和Java 9应用程序的比较
介绍
Oracle Corp 已将 Java 9的发布从 2017 年 3 月推迟至 2017 年 9 月。
- Lambda 表达式
- 流程 API
- 数据 API
同样,Java SE 9 也推出三大功能(加上几项改进和新功能):
- Java 模块系统(Jigsaw 项目)
- Java REPL
- Milling 项目硬币
在本文中,我们将讨论Oracle Jigsaw项目的基础知识。
Java SE 9: Jigsaw 项目
Jigsaw 项目将引入全新的 Java SE 9 概念: Java Module System. 这是 Oracle Corp. 在 Java SE 9 发布时的一项非常大的和著名的项目. 最初,他们已经在 Java SE 7 发布的一部分开始了这个项目。 然而,随着巨大的变化,它被推迟到 Java SE 8 然后再次推迟。
模块化 JDK
正如我们所知道的,当前的 JDK系统太大了,所以他们决定将JDK本身分成小型模块,以获得一些好处(我们将很快讨论它们)。-模块化源代码
当前的源代码(jar](/community/tutorials/how-to-create-jar-from-java-classes)文件太大了,特别是rt.jar 是太大了。所以他们将把Java源代码分成更小的模块。-模块化源代码
本功能的主要目标是重构JDK和JRE运行时图像来容纳模块
,特别是 encapsulate
如果你不清楚这些事情,不要担心,我们将深入讨论这些概念,并在接下来的一些有用的例子,以及在我即将到来的帖子。
目前的Java系统有哪些问题?
在本节中,我们将讨论为什么我们需要Java SE 9模块系统
,这意味着当前Java系统的问题。
Java SE 8 引入了三种类型的紧凑型配置文件来解决这个问题: 紧凑型、紧凑型、紧凑型、紧凑型,3 但它没有解决这个问题
- JAR 文件像 rt.jar 等太大了,无法在小型设备和应用程序中使用
*由于 JDK 太大,我们的应用程序或设备无法支持更好的性能
*目前的 Java 系统中没有强大的封装,因为
公共
访问编辑器太开放了。
为了解决所有这些问题,Oracle Corp将在Java SE 9版本中发布Java模块系统。
Java SE 9 模块系统的优势
Java SE 9 模块系统将提供以下优点
由于Java SE 9将将JDK、JRE、JAR等分为较小的模块,我们可以使用我们想要的任何模块,所以将Java应用程序扩展到小型设备很容易 *易于测试和维护 *支持更好的性能 *因为公众不仅仅是公开的,它支持非常强大的封装(不要担心它的大概念,我们很快就会用一些有用的例子来探索它)。 *我们不再可以访问内部非关键的API *模块可以安全地隐藏不必要的和内部细节,我们可以获得更好的安全性 *应用程序太小,因为我们只能使用我们想要的模块 *
我们将在不久的将来一个接一个地探索所有这些概念。
比较 JDK 8 和 JDK 9
We know what a JDK software contains. After installing JDK 8 software, we can see a couple of directories like bin, jre, lib etc in Java Home folder. However, Oracle Corp has changed this folder structure a bit differently as shown below. JDK 8 Folder Structure:
JDK 9 Folder Structure:
Here JDK 9 does NOT contain JRE. In JDK 9, JRE is separated into a separate distribution folder. JDK 9 software contains a new folder "jmods". It contains a set of Java 9 Modules as shown below. In JDK 9, No rt.jar and No tools.jar
NOTE:- As of today, "jmods" contains 95 modules. It may increase in the final release. "jmods" folder is available at ${JAVA_HOME}/jmods. These are known as JDK Modules.
Java 9 模块是什么?
A Module is a self-describing collection of Code, Data, and some Resources. It is a set of related Packages, Types (classes, abstract classes, interfaces etc) with Code & Data and Resources. Each Module contains only a set of related code and data to support Single Responsibility (Functionality) Principle (SRP). The main goal of Java 9 Module System is to support Modular Programming in Java. We will discuss on "What is a Module Descriptor" and "How to develop Java Modules" in my coming posts.
Java 9 模块系统
截至目前,Java 9 模块系统在早期访问 JDK 中有 95 个模块。
- 所有 JDK 模块都以
jdk.*
开始 * 所有 Java SE 规范模块都以java.*
开始
Java 9 模块系统有一个 **java.base
模块 **. 它被称为基础模块. 它是一个独立的模块,不依赖于任何其他模块. 默认情况下,所有其他模块都依赖于此模块. 这就是为什么java.base
模块也被称为 Java 9 模块的母亲。
Java 8 和 Java 9 应用程序的比较
We have already developed many Java applications using Java 5, 6,7, or 8. We know how a Java 8 or earlier applications looks like and what it contains. In brief, I have depicted a Java 8 applications in a diagram as shown below: In a Java 8 or earlier applications, Top level component a Package. It groups a set related to types into a group. It also contains a set of resources. Java 9 Applications does not have much difference with this. It just introduced a new component called "Module", which is used to group a set of related Packages into a group. And one more new component that Module Descriptor ("module-info.java"). That's it. Rest of the application is same as earlier versions of applications as shown below.
Like Java 8 applications have Packages as a Top level components, Java 9 applications have Module as Top Level components. NOTE:- Each Java 9 Module have one and only one Module and one Module Descriptor. Unlike Java 8 Packages, We cannot create multiple modules into a single Module. In brief I can say a Java 9 Module contains the following main components:
- 一个模块
- 模块名称
- 模块描述器
- 包
- 类型和资源
这里的资源可能是 module-info.java (Module Descriptor) 或任何其他属性或 XML. 我们在这篇文章中讨论过多的理论. 我认为这足以了解 Java 9 模块系统的基础知识. 我们将在我的下篇文章中开始一些基本的模块开发. 我会讨论一些更多的理论概念或 Java 9 模块系统术语,根据需要。 这是关于介绍 Java 9 模块系统
的主题。 我们将在我的下篇文章中讨论一些更多的 Java SE 9 模块系统概念。 请放下评论,如果你喜欢我的帖子或有任何问题/建议/类型错误。 谢谢谢阅读我的教程。 快乐的 Java SE 9 学习! 参考: Project Jigsaw