加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

初识Java 9模块化编程

发布时间:2018-08-23 14:01:42 所属栏目:教程 来源:周明耀
导读:副标题#e# 技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战 【51CTO.com原创稿件】本文是Java9系列文章的第一篇,我会通过几篇文章系统性地介绍Java9的新特性。Java9的发布对于Java语言来说是新的开始,希望Java能够一直走下去,因

当然,分解单体型(monolithic)的JDK并不仅仅是移除过时(例如CORBA)的类。JDK包含的很多技术都是这样的,对于一些人有用,对于另一些人则是无用的,但是并不是说它们过时了,仅仅是应用程序不需要使用。Java语言一直以来就存在安全性漏洞,通过模块化设计可以减少类的应用,自然也就降低了漏洞发生的几率。

截止目前,JDK9大约有超过90个平台模块,这种方式取代了以往的单一型大库形态。平台模块是JDK的一部分,它和应用程序模块是不一样的,应用程序模块是由程序员自己创建的。但是从技术层面来看,平台模块和应用程序模块又没有什么区别。每一个平台模块构造了一个JDK功能,从日志到XML的支持,等等,覆盖了原有单一型JDK的功能。

在JDK9里,所有的模块都需要在外部显示地定义与其他模块之间的依赖关系,这就好比我们买可拆装家具时的各模块之间的榫头,你一看就知道需要和哪些其他模块进行拼接,而一些其他模块都可以拿来公用的模块,比如java.logging,你就会发现很多模块都会应用它。也正是由于引入了模块化,JDK内部终于在各个模块之间有了清晰的界限,互相的引用关系终于清晰了。

注意,按照JDK9目前的模块化设计理念,所有的依赖关系都是指向向下方向的,不会出现编译时的各模块间环形依赖情况,你自己编写的应用程序模块也需要避免这种情况发生。

4. 模块资源介绍

一个模块包含模块名称、相关的代码和资源,这些都被保存在称为module-info.java的模块描述文件里,以下面这个文件为例,描述java.prefs平台模块。

(1) 清单1 module-info.java

  1. module java.prefs{ 
  2.      requires java.xml; 
  3.      exports java.util.prefs; 

代码清单1内包含了requires和exports两个关键字,逐一解释:

  • requires关键字表示了依赖关系,这里明确模块需要依赖java.xml模块,如果没有依赖生命,java.prefs模块在编译时会拒绝执行编译命令。这一点是向Maven借鉴的,使用前必须声明才能使用。
  • exports关键字表示了其他模块如何可以引用java.prefs包,由于模块化编程已经把强封装性设置成了默认选项,因此只有当包被显式地声明导出(就是这里的exported),导出为本例的java.util.prefs包。Exports是针对原有的访问方式(public、protected、private)的一个补充,是针对强一致性的补充,Java9之后,public仅仅是针对模块内部类之间的访问权限,如果你想要从外部能够应用模块内部类,你必须要exports。

注意,模块名由于是全局变量,所以需要是全局唯一的。

5. HelloWorld案例

接下来简单介绍一个HelloWorld示例。如清单2所示,HelloModularWorld类的main函数负责打印字符串“Hello World, new modular World!”。

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读