Java模块化

模块化基础

JPMS

JPMS 全称Java Platform Module System,Java模块化系统。由JEP261引入(https://openjdk.org/jeps/261

为什么要模块化?

在JDK 9之前,Java的运行时库(Runtime Library,JRE)包含一个庞大的rt.jar,其大小超过60MB,包含了Java大部分运行时类。随着JDK的发展,JDK增加了许多API,但几乎没有删除任何API,有些类,比如CORBA相关的类,现在己经很少用了,但仍然保留在JRE中,保留它们的唯一目的就是为了保证兼容性。再比如javafx相关的类,即使应用程序用不到,但是还是被包含在最终的生产jar包中。模块化的作用就是将JDK进行模块拆分,让应用程序选择依赖的模块,打包时只打包这些模块,从而可以起到精简运行时的目的。

  1. 封装

针对于库的开发者来说,经常有这种需求:类A被当前项目中其他包的其他类使用,但是不希望类A被使用这个库的其他项目使用,也就是保持一些API只在项目内部可见。虽然java提供了访问权限,但是只能做到包级别的访问控制。

模块化的JDK

JDK9之后,安装完成后会有一个jmods文件夹,里面包容了很多*.jmod文件,这些就是模块化后的JDK
在这里插入图片描述

可以通过/path/to/java.exe --list-modules命令列出JDK的模块清单

在这里插入图片描述

以jdk.开头的模块包含了JDK特定的代码,在不同的JDK实现中可能会有所不同。

在JDK 9以上的版本中,java和javac等原有JDK命令行工具都针对模块进行了功能增强,添加了一些新的命令行参数,JDK中还添加了诸如jlink之类的新命令行工具

模块信息

通过/path/to/java --describe-module 模块名命令可以查看模块的信息,这个信息实际上就是module-info.java文件中的内容(后面会提到)

.\bin\java --describe-module java.base
java.base@11.0.18
exports java.io
exports java.lang
exports java.lang.annotation
exports java.lang.invoke
exports java.lang.module
exports java.lang.ref
exports java.lang.reflect
exports java.math
exports java.net
exports java.net.spi
exports java.nio
exports java.nio.channels
exports java.nio.channels.spi
exports java.nio.charset
exports
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值