Java 9 模块
Java 9 模块是作为包集合引入的新实体,以提供某种特性或功能。 Java 9模块是Java开发工具包重新排列和分类为模块后的第一个版本。它也称为 Java 9 平台模块系统 (JPMS)。 在 java 9 中,您可以通过仅包含所需的模块来减少运行时大小。例如,对于不支持 GUI 的设备,您可以创建不包含 GUI 模块的运行时。
开始您的免费软件开发课程
网络开发、编程语言、软件测试及其他
主要亮点
- Java 9 模块是包的高级抽象的实现。
- 它将所有与功能相关的包打包到一个模块中,总共有 95 个模块。它提供了更好的平台完整性和强大的封装性。
- 它允许创建单独的 Java 模块作为 Java 应用程序或 Java API 的模块化 JAR 文件。
Java 9 模块系统
- 在 Java 9 模块中,功能相关的包被聚合到可重用的组中,称为模块。
- Java 9 模块可能包含资源(例如图像和 XML 文件)。 java.base模块是一个独立的模块,是每个模块所必需的。
- 系统模块是标准的,其名称以java开头。
- 例如,JavaFX 模块(名称以 JavaFX 开头)、JDK 模块(名称以 jdk 开头)、Oracle 模块(名称以 oracle 开头)。
Java 9 模块的类型
1.应用模块
- 这些模块是由程序员创建的。
- 组装路径非官方JAR包含编译后的module-info.a类文件,其中包含模块的名称和定义。
2.自动模块
- 将现有 JAR 文件添加到模块时,会创建自动模块。
- JAR 的名称成为模块的名称。
3.未命名模块
- 它是加载到类路径但未加载到模块路径中的类或 JAR。
- 它是一个包罗万象的模块,用于保持与以前编写的 Java 代码的向后兼容性。
模块化描述符
- module-info.java 文件包含模块定义或描述模块的元数据。
- 编译 module-info.java 时,我们得到包含模块描述符的 module-info.class,该描述符存储在模块的根文件夹中。
- 模块化描述符由一个或多个导出组成,并且需要一个子句。
- 它是一个独立的模块,可以将包导出到其他模块,并且可以使用其他模块的包。
- 元数据包括三件事,唯一名称、exports 子句和requires 子句。
- 唯一名称:为模块指定的名称。
代码:
module eg.com.module1 { }
- 导出子句:模块中的包可以导出,以便其他模块可以使用它们。
代码:
module eg.com.module1 { exports eg.com.module1.service; }
- Requires 子句:当你需要其他模块的包时使用。
代码:
{ requires eg.com.module1; }
Java 9 模块系统应用的模块
- 从jdk的bin文件夹中列出JDK集合的模块。在 CLI java –list-modules 中运行以下命令
- 关键字 module 用于声明模块。模块主体用大括号括起来,如: module modulename { }
- exports 模块指令使所有其他模块中的代码都可以访问该模块的包。
- 导出...来定义合格报告。 可以在逗号分隔的列表中精确指定可以访问导出包的包列表。
代码:
module com.educba.util { exports com.educba.app; exports com.educba.security to com.educba.client, com.educba.producer; }
- 当使用开放模块指令时,给定模块中的所有包都可以在运行时通过反射到所有其他模块来访问。要允许仅运行时访问模块中的所有包,您可以打开整个模块,如下所示:
代码;
open module <em>modulename</em> { // module directives }
- To allow runtime-only access to packages in a module. An open module directive of the form opens package- can be used. The code in other modules can access the public types of a package and its nested public and protected types at runtime only. Reflection can be used to access all the types and the types’ members in the specified package.
- The code in the listed modules can access the public types of a package and its nested public and protected types at runtime only. Reflection to code in the specified modules can be used to access all of the types and types’ members in the specified package.
How to Create a New Java 9 Module?
- Create a directory structure
src\com.educba\com\educba
- In the command prompt
mkdir –r src\com.educba\com\educba
- Create a new module in a text editor and save it as a java file module-info.java.
module com.educba { }
- Set the environment variable JAVA_HOME to the path where Java is installed.
For example, JAVA_HOME C:\Program Files\Java\jdk-9\bin
Add %JAVA_HOME% to PATH in control Panel->system->advanced system setting->environment variables.
- To see the compiled module descriptor in the CLI.
Code:
>javap mods/com.educba/module-info.class
Output:
It shows requires java.base in the modules definition, though we had created an empty module. It is because java.base is the basic and independent module. All other modules depend on it.
Comparison Table of JDK 8 and JDK 9
The most obvious difference between JDK 8 and JDK 9.
Feature | Java 8 | Java 9 |
Top Level component | Package | Module |
New features launched | ● Lambda Expressions
● Stream API ● Date API |
● Java Module System (Jigsaw Project)
● Java REPL ● Milling Project Coin |
Performance | Compromised performance due to big size of jdk | Improved performance |
Testing and maintaining applications | Difficult with large size of JRE | Easy with REPL and reduced size depending on modules included. JShell or REPL: Read and evaluate Print Loop for easy execution and testing of Java Constructs like class, interface, enum, object, and statements easily. |
Security | It is compromised because of no encapsulation. Internal APIs can be accessed easily by users and potential hackers. Reflection could be used to learn about private members too. | String security as Reflection does not provide access to private members. Only those exposed by export keywords are available through reflection. |
Packaging format | JAR | JMOD can include native code and configuration files. |
结论
Java 9 确实是最受欢迎的 Java 代码重组,使其与分布式架构的新编码技术兼容。它通过选择包含所需的模块来帮助减少可执行文件的大小,从而提高性能。强大的封装性提高了安全性,同时减少了潜在黑客可用的类。模块化提供了依赖性声明和确定的透明度。
常见问题解答
Q1。如何将旧应用程序迁移到 JAVA 9?
答案:你可以在Java 9中编译你的遗留应用程序。在编译时,你会遇到那些不属于Java 9模块化结构的代码部分的错误。这里你需要花费一些时间是时候包含所需的模块了。您可以使用 Jshell 测试新代码以获得所需的输出。
Q2。我如何知道系统提供了哪些模块?
答案: java –list-modules 可用于列出模块。您需要参考文档来了解它们的功能。
Q3。 JAVA需要安装IDE吗?
答案:不。这取决于您对命令行界面的熟悉程度。 IDE 在后端完成许多用户不知道的工作。 CLI 是识别问题并解决问题的最佳选择。
Q4。如何访问我的模块中的公共包?
答案:您需要在模块的模块定义中添加以下内容才能访问公共包,info.java和required_package_name。
以上是Java 9 模块的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

Java 8引入了Stream API,提供了一种强大且表达力丰富的处理数据集合的方式。然而,使用Stream时,一个常见问题是:如何从forEach操作中中断或返回? 传统循环允许提前中断或返回,但Stream的forEach方法并不直接支持这种方式。本文将解释原因,并探讨在Stream处理系统中实现提前终止的替代方法。 延伸阅读: Java Stream API改进 理解Stream forEach forEach方法是一个终端操作,它对Stream中的每个元素执行一个操作。它的设计意图是处

PHP适合web开发,特别是在快速开发和处理动态内容方面表现出色,但不擅长数据科学和企业级应用。与Python相比,PHP在web开发中更具优势,但在数据科学领域不如Python;与Java相比,PHP在企业级应用中表现较差,但在web开发中更灵活;与JavaScript相比,PHP在后端开发中更简洁,但在前端开发中不如JavaScript。

PHP和Python各有优势,适合不同场景。1.PHP适用于web开发,提供内置web服务器和丰富函数库。2.Python适合数据科学和机器学习,语法简洁且有强大标准库。选择时应根据项目需求决定。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP成为许多网站首选技术栈的原因包括其易用性、强大社区支持和广泛应用。1)易于学习和使用,适合初学者。2)拥有庞大的开发者社区,资源丰富。3)广泛应用于WordPress、Drupal等平台。4)与Web服务器紧密集成,简化开发部署。

PHP适用于Web开发和内容管理系统,Python适合数据科学、机器学习和自动化脚本。1.PHP在构建快速、可扩展的网站和应用程序方面表现出色,常用于WordPress等CMS。2.Python在数据科学和机器学习领域表现卓越,拥有丰富的库如NumPy和TensorFlow。
