1 Star 0 Fork 1

beside/Java

forked from LiuYan/Java 
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
Module.java 1.95 KB
一键复制 编辑 原始数据 按行查看 历史
liuyan 提交于 2023-05-10 13:21 +08:00 . java9、java10、java11
package newFeature;
import java.lang.reflect.Field;
/**
* @Author: LiuYan
* @Date: 2023/3/12 20:04
* 主要是API的优化,如支持HTTP2的Client API、JVM采用G1为默认垃圾收集器
* 1、模块化:
* (1)反射API的Java9封装和安全性得到了改进,如果模块没有明确授权给其他模块使用反射的权限,那么其他模块是不允许使用反射进行修改的,Unsafe类玩不转了
* (2)模块机制:
* 系统模块:来自JDK和JRE的模块(官方提供的模块,我们平时导用的)
* 应用程序模块:自己写的Java模块项目
* 自动模块:有些库不是Java9以上的模块项目,要做兼容,默认情况下直接导出所有的包,可以访问所有其他模块提供的类,兼容老版本
* 未命名模块:传统Java8以下的编程模式,因为没有模块只需要导包就行,兼容老版本
* (3)指定模块暴露:
* export com.test to module.b 使用exports将com.test包下所有内容暴露出去,这样其他模块才能导入
* requires transitive java.logging 使用transitive来向其他模块传递此依赖
* opens com.test 通过使用opens关键字来为其他模块开放反射权限
* uses com.test.Test 使用uses指定,Test是一个接口(比如需要的服务等),模块需要使用到
* provides com.test.Test with com.main.TestImpl 声明此模块提供了Test的实现类
*/
public class Module {
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
// Unable to make field private final byte[] java.lang.String.value accessible: module java.base does not "opens java.lang" to module java9
Class<String> stringClass = String.class;
Field field = stringClass.getDeclaredField("value"); // 通过反射获取String类中value字段
field.setAccessible(true); // 由于是private访问权限,我们修改成可访问权限
System.out.println(field.get("java9"));
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/beside/java.git
git@gitee.com:beside/java.git
beside
java
Java
master

搜索帮助