java 模块添加新功能_体验JDK9新特性:模块

概述

8076b93699199e917a90501be4d1d08f.png

JDK9发布以来,JAVA添加了一个重要的新功能,称为“模块”。模块提供了一种描述组成应用程序的代码的关系和以来层次的方式。模块还允许控制其中的哪些部分可以访问其他模块,哪些不能访问其它模块。使用模块可以创建更可靠、更具伸缩性的应用。

一般而言,模块对大型应用程序有很大的好处,因为模块可以降低与大型系统相关的管理复杂性。但是小规模的程序也能得益于模块,因为JDK的API现在组织到模块中。因此,如今的JAVA程序可以指定需要那部分的API,不需要哪部分的API。这项改变有助于计算机以更短的运行时间部署程序。

对模块的支持通过语言元素来提供,包括新关键字,以及对javac、java和其他JDK工具的改进,而且引入了新工具和文件格式。简单地说,模块是JAVA9的一个新特性。

模块基础

在最基本的意义上,模块可以通过模块名统一指代的包和资源的一种组合。模块声明指定了模块的名称,定义了模块及其包与其他模块的关系。模块声明是JAVA源文件中的语句。通过与之相关的几个关键字来支持:

exports、module、open、opens、provides、requires、to、transitive、uses、with

注意,这些关键字尽在模块声明的时候才会被看成关键字,在其他情况下,都会被解释为标识符。这样的设计,可以防止已有的旧代码把这些用于标识符时出现的兼容性问题。例如,假如在JDK9之前的某个程序中使用requires作为变量名。将改程序移植到JDK9之后,如果requires在模块外被识别为关键字,这段代码就会出现编译错误。尽在模块中将requires看做关键字可以有效的防止这一点,因此关键字requires也可以用作变量名,只是这种用法不推荐而已。

7686372aec0ddb6ddf76bc7eeb64aa79.png

模块声明包含在module-info.java文件中。因此,模块在JAVA源文件中定义。这个文件由javac编译到一个类文件中,称为模块描述符。module-info.java文件只能包含一个模块定义,不是通用文件。模块声明以关键字module开头,一般形式如下:

module myModule {}

其中,myModule是模块名,必须是java有效的标识符。

牛刀小试

1)创建目录moduleapp,这是应用的顶级目录。

2)在moduleapp下创建目录appsrc,这是存放源代码的。

3)在appsrc下创建目录appstart。在这个子目录下在创建子目录appstart,在这个子目录下在创建appdemo,因此,从appsrc开始创建了如下结构:

appsrc\appstart\appstart\appdemo

4)在appsrc下创建appfuncs。在这个子目录下在创建appfuncs,在这个子目录下创建simplefuncs,因此,从appsrc开始创建了如下结构:

appsrc\appfuncs\appfuncs\simplefuncs

5)整个建好的目录结构如图:

7dfdd4b35475b1212d8de73311687e34.png

6)在appfuncs\simplefuncs目录下,写一个SimpleMathFuncs.java:

04a5b0eabc4b27902b95ecc4614d18c5.png

7)在appstart\appdemo下写一个ModuleAppDemo.java,导入了SimpleMathFuncs类,使用了SimpleMathFuncs中的方法。

bc70ec203481df88e36cbbec10fce878.png

8)在appsrc\appfuncs下添加aapfuncs模块文件module-info.java:

3e1790d7ed175d58ad4cc907e81fb933.png

9)在appsrc\appstart下添加模块文件module-info.java:

7be7af22c9691e2d65c4d7026382581e.png

编译程序

JDK9开始支持模块,因此与其他JAVA程序一样,基于模块的程序也可以使用javac编译。不过我们需要给编译器指定模块路径,而且确保在moduleapp目录下执行javac命令。

1)使用如下命令编译SimpleMathFuncs.java文件:

javac -d appmodules/appfuncs appsrc/appfuncs/appfuncs/simplefuncs/SimpleMathFuncs.java

2)使用如下命令编译appfuncs模块:

javac -d appmodules/appfuncs appsrc/appfuncs/module-info.java

3)以上两步可以并为一步:

javac -d appmodules/appfuncs appsrc/appfuncs/module-info.java

appsrc/appfuncs/appfuncs/simplefuncs/SimpleMathFuncs.java

4)现在使用一个命令编译appstart模块和ModuleAppDemo.java文件

javac --module-path appmodules -d appmodules/appfuncs

appsrc/appstart/module-info.java

appsrc/appstart/appstart/appdemo/ModuleAppDemo.java

运行程序

使用如下命令运行该程序:

javac --module-path appmodules -m appsrc/appstart.appdemo.ModuleAppDemo

得到如下结果:

2是10的因数

35和105的最小公因数是:5

35和105的最大公因数是:7

如果大家有兴趣,我会继续更新模块的相关内容!

a3837b7d0b966cb625e3dbda91b2757d.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值