Java 9 Module的特性以及解决的问题

Java 9 模块化的一个最大的变化体现在Java结构上。 本文将介绍关于“Java 9模块系统的”高级特性。

Java 9 模块化

  • 我们将探讨关于Java 9模块化系统的以下主题:

    1.介绍

    2.JavaSe9之Jigsaw Project

    3.当前Java系统的问题

    4.Java9模块系统的特性

    5.Jdk9和Jdk8的对比

    6.Java9模块化是什么?

    7.Java9模块化系统之母

    8.Java9和Java8程序的对比。

介绍

Oracle 将Java 9从2017年3月延期到2017年9月进行发行。

我们知道, Java SE 8提供了三大新特性(加上少量改进和新特性)。

  • Lambda 表达式
  • Stream API
  • Date API

同样地, Java SE 9提供了三大新特性(加上少量改进和新特性):

  • Java模块系统(Jigsaw项目)
  • Java REPL(交互式编程)
  • Milling project coin(主要是语法改进的一个项目,Java7的时候就已经开始)

接下来,我们将谈论关于Oracle的Jigsaw项目。

Java SE 9 :Jigsaw项目

接下来我们将对Jigsaw项目--> Java SE 9: Java模块系统中的一些新特性,做一个简单的介绍。

JavaSE9中的Jigsaw项目来源与Oracle项目中一个非常出名的大项目。其实在Java7的版本开始就已经启动。 但是由于变动巨大被延期到JavaSE8,最终是随着17年9月份发布的JavaSE9一起发布。

Jigsaw项目的主要目标:

  • 模块化JDK

我们知道,当前JDK系统是很大的。因此他们决定划分JDK成小模块得到一定数量的好处(我们很快会在后边的部分谈论到他们)。

  • 模块化源代码

当前原始代码jar文件是非常大的,特别是rt.jar是相当的大。 因此他们划分Java原始代码成更小的模块。

  • 模块化执行时间的影像

这个特性的主要目标是“调整JDK和JRE执行时间的影像系统的支撑”。

  • 压缩大部分内部的API

这个特性的主要目标是“使大多JDK的内部APIs不能进入,但是留下一些重要,用途广泛的内部的APIs”。

  • Java平台模块系统

这个特性的主要目标“允许用户创造他们的模块开发他们的应用” .

  • jlink :Java连接器

这个jlink工具的主要目标“允许用户在他们的应用中创建可执行文件”。

如果您还是对这些还不清晰,不要担心。 我们将在后边的部分列举一些有用的例子来详细讨论这些概念。

当前Java系统的问题?

在这个部分,我们将谈论关于“我们为什么需要Java SE 9那模块的系统”手段,也就是当前Java系统的问题所在。

  • Java SE 8或更加早期的系统在开发或提供Java应用时有以下问题:
  1. 因为JDK是太大的,对于小设备很难进行等比例缩减。Java SE 8提出了3种紧凑类型解决这个问题:compact1、compact2和compact3。 但是这个问题并没有得到有效的解决。

  2. Jar文件,像rt.jar等jar文件太大的以至于不能使用在小设备和应用中。

  3. 因为JDK是太大的,我们的应用或设备不能支持更好的平台.

  4. 由于修饰符是public的缘故,每个人都可以通过此来进行访问,所以在当前Java系统的封闭性不是很强。

  5. 由于JDK,Jre过于庞大,以至于很难进行测试和维护应用。

  6. 由于public的关系,Java比较开放。不可避免的能访问象sun.*, *.internal.*等的一些内部不重要的APIs。

7.由于上述关系,用户可以访问到一些内部的api,所以安全性方面也是一个大问题。

  1. 应用太大。

  2. 组件间的松耦合的支持稍微薄弱。

为了解决所有这些问题, 所以Oracle Corp在Java SE 9中发布了Java SE 9模块系统.

Java9模块系统特性

Java SE 9模块系统提供以下的便利性:

  • 在Java SE 9中分离了JDK, JRE,jar等为更小的模。因此我们可以方便的使用任何我们想要的模块。因此缩减Java应用程序到小设备是非常容易的。

  • 更加容易的测试和维护

  • 支持更好的平台

  • public不再仅仅是public。现在已经支持非常强的封闭性(不用担心,后边我们会用几个例子来解释)。

  • 我们不能再访问内部非关键性APIs了。

  • 模块可以非常安全地帮助我们掩藏那些我们不想暴露的内部细节,我们可以得到更好的Security.

  • 应用会变的非常小,因为我们可以只使用我们要用的模块。

  • 组件间的松耦合变得非常容易。

  • 更容易支持唯一责任原则(SRP)。

接下来我们会逐个探索这些概念。

比较JDK 8和JDK 9

我们知道JDK软件都包含什么。在安装JDK 8软件以后,我们能看到目录中包含bin、jre、lib等解压在Java主目录中。

在Jdk9中,Oracle Corp稍微改变了这个文件夹的结构如下所示。

  • JDK 8文件夹结构:

  • JDK 9文件夹结构:

我们可以发现在JDK 9中不包含JRE的。 JRE被分离到一个分开的文件夹。 但是JDK 9软件包含一个新的文件夹“jmods”。它包含一套Java 9模块,如下所示。

在JDK 9,没有rt.jar和tools.jar文件。

  • 注:截止到今天, “jmods”包含98个模块。在后续的版本也许会增加。 “jmods”文件夹在$ {JAVA_HOME} /jmods中才可用。这些叫JDK Modules. *

什么是Java 9模块化?

Java9中的模块是代码、数据和有些资源的自描述的集合。它是一套相关package、type(类、抽象类,接口等)与代码&数据和资源。

每个模块仅包含一套支持唯一责任(功能)原则(SRP)的相关代码和数据。

Java 9模块系统的主要目标是在Java中支持模块化程序设计。

后续我们将谈论在“什么是模块描述符”和“如何开发Java模块”

Java 9模块化系统之母

到现在为止Java 9模块系统提供了98个模块。 并且Oracle Corp已经分离JDK的jars和Java SE规格到两套Modules里.

  • 所有的JDK Mdoules与 “jdk.*”一起启动。

  • 所有Java SE规格模块与“java.*”一起启动。

Java 9模块系统有一个“java.base”模块。它叫作基本的模块。 它是一个独立模块并且没有依赖于所有其他模块。 默认情况下,其他模块依赖于这个模块。

所以“java.base”模块是被成为Java9模块化系统之母。

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

对比的Java 8和Java9应用

使用Java 5,6,7或者8.,我们已经开发了许多Java应用程序。我们知道Java 8或更早的应用是什么样的,包含什么东西。

简而言之,Java 8的应用会是如下所示:

在Java 8或更早的应用,包的顶级组件是按type类型相关的集合进行分组的。同时他也包含一些静态资源。

Java 9的应用与之前的没有太多的不同。 他只是引入了一个新的组件叫module,如果你要用它就需要将相关联的包集合分组到同一个组中。再有就是module修饰符(“module-info.java”).

应用的其余同初期版本应用一样如下所示。

像Java 8应用一样,顶层组件是package,在Java9中则使用module作为顶层组件。

注: 每个Java 9模块有仅有的一个模块和一个模块描述符。不同于Java 8,我们不能在独立的module里面创建多个modules。

简而言之,我们可以说Java 9模块包含以下主要部分:

  • one Module

  • Module Name

  • Module Descriptor(描述符)

  • 包集合

  • Types和Resources集合

在这里资源可能是module-info.java, (Module Descriptor)或其他properties 或者XML。

结语

作者:ricky

交流群:244930845

Java 9 Module的特性以及解决的问题相关推荐

  1. Java SE 6 新特性 Instrumentation 新功能

    系列内容: 此内容是该系列的一部分:Java SE 6 新特性 Instrumentation 简介 利用 Java 代码,即 java.lang.instrument 做动态 Instrumenta ...

  2. java jpms_JDK9的新特性:JPMS模块化

    简介 JDK9引入了一个新的特性叫做JPMS(Java Platform Module System),也可以叫做Project Jigsaw.模块化的本质就是将一个大型的项目拆分成为一个一个的模块, ...

  3. Java基础篇——三大特性(封装)

    Java三大特性我会用自己理解给大家一一介绍,有兴趣的可以关注一下,可以让你学到一些基础但是又非常实用的东西,基本上都是自己的一些理解和实践结果,对于新手来说可以避免走弯路(后期会出Java的其他重要 ...

  4. 【小家java】java9新特性(简述十大新特性) 褒贬不一

    相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...

  5. Java基础之扩展特性

    Java基础之扩展特性 一.泛型 二.包装类 三.递归算法 四.异常处理 五.自定义异常 六.常用类 七.String 的正则表达式 八.Java 和 C++的区别 九.TCP/IP 初识 十.Soc ...

  6. java.lang.module_如何修复“java.lang.module.FindException:module java.se.ee not found”错误

    我正在尝试打包我的kivy应用程序(python3),但是当我运行命令buildozer -v android debug时,看到这个错误# Cwd /home/javier/.buildozer/a ...

  7. Java 8的新特性—终极版

    前言: Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.在Java Code Geeks上已经有很多介绍Java 8新特性的文章,例如Playing with Java ...

  8. 深入理解java虚拟机 -- jVM高级特性与最佳实践

    <深入理解 Java 虚拟机–JVM高级特性与最佳实践> 关于这本书已经断断续续的看了好几遍了,使自己对jvm有了很深的理解,但是由于长时间的不用,对很多的功能点有所遗忘,特此写下这篇随手 ...

  9. Java Seckill Module:Order details are static and Resolve purchases beyond

    上期回顾: Java Seckill Module:Seckill interface front and rear end separation 一.订单详情页面静态化 获取订单详情:页面传入ord ...

  10. Java SE 6 新特性: Instrumentation 新功能

    2006 年底,Sun 公司发布了 Java Standard Edition 6(Java SE 6)的最终正式版,代号 Mustang(野马).跟 Tiger(Java SE 5)相比,Musta ...

最新文章

  1. PyTorch中的MIT ADE20K数据集的语义分割
  2. openpyxl模块介绍
  3. 脑电数据分析工具汇总
  4. 干货 | 126 篇 AI 原创文章精选(ML、DL、资源、教程)
  5. 跨计算机建立视图_计算机二级office
  6. html中电子邮件怎么写,谈html mailto(电子邮件)实际应用
  7. maven处理和java平级的资源文件
  8. 配色的协调性的重要性,你知道吗?
  9. UIWebView 真机iOS 8.x系统上报错
  10. jQuery实现Ajax
  11. 设置eclipse中的字体大小
  12. 安装MiniTools后,不能识别USB的问题
  13. python文本聚类dbscan_文本挖掘之文本聚类(DBSCAN)
  14. ShineDisk M667固态修复记录 慧荣SM2258XT开卡量产工具
  15. 国外手游公司老板们如何开发游戏?
  16. vultr 云主机收不到来自客户端的udp数据包
  17. Idea控制台 CMD Tomcat乱码
  18. 亚马逊erp系统详细介绍,新手第一步
  19. ns-3的绘图工具——Gnuplot
  20. 要脱大家一起脱:网络实名制与官员财产透明化

热门文章

  1. SWOT模板与方法论
  2. 计算机网络管理员考试试题,计算机网络管理员考试试题和答案
  3. 瑞星网络版防病毒软件For Linux通过银河麒麟产品兼容性测试
  4. 你了解东大六维空间嘛?
  5. 计算机中ms-dos什么意思,msdos是什么意思
  6. html css绘制24色环图,HTML5 色环钟表
  7. 【联想拯救者R7000】蓝牙和wifi图标不显示问题(已解决)
  8. 打开速达服务器出现系统通知,速达7000重装后,启动网络版服务器时会提示程序版本与数据库版本不一致...
  9. ios睡眠分析 卧床 睡眠_使用Swift在HealthKit中进行睡眠分析
  10. MapABC Flex地图官方API应用整理