前言:
现在同学们对“javajdk9”大致比较重视,咱们都想要学习一些“javajdk9”的相关文章。那么小编也在网摘上网罗了一些关于“javajdk9””的相关内容,希望看官们能喜欢,各位老铁们一起来了解一下吧!概述
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也可以用作变量名,只是这种用法不推荐而已。
模块声明包含在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)整个建好的目录结构如图:
6)在appfuncs\simplefuncs目录下,写一个SimpleMathFuncs.java:
package appfuncs.simplefuncs; /** * @author 摆技 */public class SimpleMathFuncs { //b能否被a整除 public static boolean isFactor(int a, int b) { if((b%a) == 0) return true; return false; } //返回a和b的最小公因数 public static int lcf(int a, int b) { a = Math.abs(a); b = Math.abs(b); int min = a < b ? a : b; for(int i = 2; i <= min/2; i++) { if(isFactor(i, a) && isFactor(i, b)){ return i; } } return 1; } //返回a和b的最大公因数 public static int gcf(int a, int b) { a = Math.abs(a); b = Math.abs(b); int min = a < b ? a : b; for(int i = min/2; i >= 2; i--) { if(isFactor(i, a) && isFactor(i, b)) return i; } return 1; } }
7)在appstart\appdemo下写一个ModuleAppDemo.java,导入了SimpleMathFuncs类,使用了SimpleMathFuncs中的方法。
package appstart.appdemo; import appfuncs.simplefuncs.SimpleMathFuncs; /** * @author 摆技 */public class ModuleAppDemo { public static void main(String[] args) { if(SimpleMathFuncs.isFactor(2, 10)){ System.out.println("2是10的因数"); } System.out.println("35和105的最小公因数是:" + SimpleMathFuncs.lcf(35, 105)); System.out.println("35和105的最大公因数是:" + SimpleMathFuncs.gcf(35, 105)); } }
8)在appsrc\appfuncs下添加aapfuncs模块文件module-info.java:
module appfuncs { exports appfuncs.simplefuncs; }
9)在appsrc\appstart下添加模块文件module-info.java:
module appstart { requires appfuncs; }编译程序
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的最小公因数是:535和105的最大公因数是:7
如果大家有兴趣,我会继续更新模块的相关内容!
标签: #javajdk9