21、反射

JDK21下HashMap序列化异常:解析反射访问serialVersionUID的权限问题 本文深入解析了在JDK21环境下,HashMap等集合类在序列化或JSON转换时抛出`Unable to make field private static final long java.util.HashMap.serialVersionUID accessible`异常的根源。问题核心在于JDK9引入的模块化系统限制了反射访问JDK内部私有成员。文章提供了三种解决方案:通过JVM启动参数`--add-opens`临时开放权限、升级或配置序列化库以规避反射、以及重构代码使用明确POJO替代Map,并给出 阅读详情

1、反射相关的主要API

java.lang.Class:代表一个类
java.lang.reflect.Method:代表类的方法
java.lang.reflect.Field:代表类的成员变量
java.lang.reflect.Constructor:代表类的构造器
… …

2、Class类的常用方法

方法名                                                                                 功能说明
static Class forName(String name)                 返回指定类名 name 的 Class 对象
Object newInstance()                                 调用缺省构造函数,返回该Class对象的一个实例
getName()                 返回此Class对象所表示的实体(类、接口、数组类、基本类型或void)名称
Class getSuperClass()                                 返回当前Class对象的父类的Class对象
Class [] getInterfaces()                                         获取当前Class对象的接口
ClassLoader getClassLoader()                                 返回该类的类加载器
Class getSuperclass()                         返回表示此Class所表示的实体的超类的Class
Constructor[] getConstructors()                 返回一个包含某些Constructor对象的数组
Field[] getDeclaredFields()                                         返回Field对象的一个数组
Method getMethod(String name,Class … paramTypes) 返回一个Method对象,此对象的形参类型为paramType

3、获取Class类的实例(四种方法)

1)前提:若已知具体的类,通过类的class属性获取,该方法最为安全可靠,程序性能最高
实例:Class clazz = String.class;
2)前提:已知某个类的实例,调用该实例的getClass()方法获取Class对象
实例:Class clazz = “www.atguigu.com”.getClass();
3)前提:已知一个类的全类名,且该类在类路径下,可通过Class类的静态方法forName()获取,可能抛出ClassNotFoundException
实例:Class clazz = Class.forName(“java.lang.String”);
4)其他方式
ClassLoader cl = this.getClass().getClassLoader();
Class clazz4 = cl.loadClass(“类的全类名”);
 
关于类加载器的一个主要方法:getResourceAsStream(String str):获取类路径下的指定文件的输入流
• InputStream in = null;
• in = this.getClass().getClassLoader().getResourceAsStream("exer2\\test.properties");

4、创建运行时类的对象

 
创建类的对象:调用Class对象的newInstance()方法
要 求:         1)类必须有一个无参数的构造器。
                     2)类的构造器的访问权限需要足够。

5、获取运行时类的完整结构

 
1).实现的全部接口
public Class<?>[] getInterfaces()
确定此对象所表示的类或接口实现的接口。
2.所继承的父类
public Class<? Super T> getSuperclass()
返回表示此 Class 所表示的实体(类、接口、基本类型)的父类的Class。
 
3).全部的构造器
public Constructor<T>[] getConstructors()
返回此 Class 对象所表示的类的所有public构造方法。
public Constructor<T>[] getDeclaredConstructors()
返回此 Class 对象表示的类声明的所有构造方法。
Constructor类中:
        取得修饰符: public int getModifiers();
        取得方法名称: public String getName();
        取得参数的类型:public Class<?>[] getParameterTypes();
 
4).全部的方法
public Method[] getDeclaredMethods()
返回此Class对象所表示的类或接口的全部方法
public Method[] getMethods()
返回此Class对象所表示的类或接口的public的方法
Method类中:
        public Class<?> getReturnType()取得全部的返回值
        public Class<?>[] getParameterTypes()取得全部的参数
        public int getModifiers()取得修饰符
        public Class<?>[] getExceptionTypes()取得异常信息
 
5).全部的Field
public Field[] getFields()
返回此Class对象所表示的类或接口的public的Field。
public Field[] getDeclaredFields()
返回此Class对象所表示的类或接口的全部Field。
Field方法中:
        public int getModifiers() 以整数形式返回此Field的修饰符
        public Class<?> getType() 得到Field的属性类型
        public String getName() 返回Field的名称。
 
6). Annotation相关
get Annotation(Class<T> annotationClass)
getDeclaredAnnotations()
7).泛型相关
获取父类泛型类型:Type getGenericSuperclass()
泛型类型:ParameterizedType
获取实际的泛型类型参数数组:getActualTypeArguments()
8).类所在的包 Package getPackage()

6、调用运行时类的指定结构

6.1、调用指定方法

通过反射,调用类中的方法,通过Method类完成。步骤:
1.通过Class类的getMethod(String name,Class…parameterTypes)方法取得一个Method对象,并设置此方法操作时所需要的参数类型。
2.之后使用Object invoke(Object obj, Object[] args)进行调用,并向方法中传递要设置的obj对象的参数信息。
 
Object invoke(Object obj, Object … args)
说明:
1).Object 对应原方法的返回值,若原方法无返回值,此时返回null
2).若原方法若为静态方法,此时形参Object obj可为null
3).若原方法形参列表为空,则Object[] args为null
4).若原方法声明为private,则需要在调用此invoke()方法前,显式调用方法对象的setAccessible(true)方法,将可访问private的方法。
 

6.2、调用指定属性

在反射机制中,可以直接通过Field类操作类中的属性,通过Field类提供的set()和get()方法就可以完成设置和取得属性内容的操作。
public Field getField(String name) 返回此Class对象表示的类或接口的指定的public的Field。
public Field getDeclaredField(String name)返回此Class对象表示的类或接口的指定的Field。
在Field中:
public Object get(Object obj) 取得指定对象obj上此Field的属性内容
public void set(Object obj,Object value) 设置指定对象obj上此Field的属性内容

7、动态代理

 

 

 

 

 

置换矩阵、转置矩阵以及向量空间、子空间 置换矩阵、转置矩阵以及向量空间、子空间导读置换矩阵 导读 MIT矩阵分析课程之后的的二篇笔记。 阅读详情

相关推荐

别再纠结Dify了!实测对比RAGFlow和Dify,聊聊企业知识库到底该怎么选

本文深度对比了RAGFlow和Dify在企业知识库选型中的实际表现,从技术架构、性能指标、部署成本等多维度进行分析。RAGFlow在复杂文档处理和准确率方面表现突出,适合有专职技术团队的企业;而Dify则以低门槛和快速部署见长。文章提供了六维度评估法,帮助企业根据文档复杂度、准确率要求等技术指标做出明智选择。

weixin_30897233的博客 668

Java反射之getInterfaces()方法

博客引用处(以下内容在原有博客基础上进行补充或更改,谢谢这些大牛的博客指导): Java反射之getInterfaces()方法 getInterfaces()方法和Java的反射机制有关。它能够获得这个对象所实现的所有接口。 例如: Class&lt;?&gt; string01 = person.getClass().getInterfaces()[0]; //获得person对象所实现的...

Willian的博客屋 1万+

在Ubuntu 22.04上从零搭建TrinityCore 3.3.5服务器:一份保姆级避坑指南

本文详细介绍了在Ubuntu 22.04系统上从零搭建TrinityCore 3.3.5服务器的完整流程,包括环境准备、源码编译、数据库配置、资源文件处理及性能调优等关键步骤。特别针对国内开发者和低配置用户优化,提供保姆级避坑指南,帮助用户高效搭建魔兽世界经典旧世版本私服。

weixin_33393017的博客 304

getinterfaces_Java类类getInterfaces()方法及示例

getinterfaces 类的类getInterfaces()方法 (Class class getInterfaces() method) getInterfaces() method is available in java.lang package. getInterfaces()方法在java.lang包中可用。 getInterfaces() method is used to fin...

3059

4 种方法识别Linux系统 USB 设备

导读 如果在系统中插入一个设备,尤其是在桌面环境下,比如 USB 设备,它会自动挂载到一个指定目录,一般是在 /media/username/device-label 目录下,之后你就可以进入到该目录下访问那些文件了。然而,在服务器上就不是这么回事了,你必须手动挂载这个设备,并且指定一个挂载点。 查询USB设备 Linux 系统使用 /dev 目录下特定的设备文件来标识插入的

郑帅的博客 1986

ArcMap|使用模型构建器将kml文件批量转图层

参考:https://www.jianshu.com/p/6de18f846024 第一步:打开模型构建器,拖入kml转图层工具 第二步:插入文件迭代器 第三步:双击“迭代文件”,选择kml所在文件夹 第四步:将“File.kml”与“KML转图层”连接,点击“输入KML文件” 第五步:双击“KML转图层”,更改输出位置,输出数据名称改为%名称% 第六步:运行模型 得到结果: ...

个人学习笔记 3600

【java学习—十四】反射获取类的父类、接口、构造方法、方法(3)

其中父类为Person类,子类为Student类,两种接口分别为Move和Study两种,用来描述上学方式和学习范围。③取得参数的类型: public Class

weixin_44883789的博客 1543

基于C#通过PLCSIM ADV仿真软件实现与西门子1500PLC的S7通信方法演示

基于C#通过PLCSIM ADV仿真软件实现与西门子1500PLC的S7通信方法演示

Robot_PLC_HMI_Automation 3156

Java Reflection 教程(2): Classes 类定义

使用Java Reflection (有翻译成反射的)API可以在程序运行时动态查询类的定义,查询类的定义是使用Java Reflection API 所要作的第一件事. 也就是说所有反射操作的入口点为java.lang.Class 类。有下面几种方法可以取得某个数据类型对应的Class类: Object.getClass() 当可以访问一个类型的实例对象时,一个简单的方法使用通过Objec

引路蜂移动软件 1708

《驾驭你的AI同事:WorkBuddy深度精通》027:11.1 私有知识库接入

11.1 私有知识库接入 —— 《驾驭你的AI同事:WorkBuddy深度精通》系列图文教程,配图已统一为规范示意图。

LuckyHanMo的博客 135

Unreal5从入门到精通之如何录制360°VR全景视频

摘要:本文详细介绍了使用虚幻引擎(UE)生成360°全景视频的完整流程。首先需启用MovieRender Queue和Panoramic Capture插件,准备场景并设置相机序列。通过影片渲染队列选择8K分辨率输出PNG序列帧,利用ffmpeg工具转换为MP4格式,最终获得高精度全景视频。该方法适用于VR内容开发,能以较低性能消耗实现影院级画质,特别适合冥想类应用场景。教程涵盖从插件配置到后期合成的全链路操作,为开发者提供高效的全景内容生产解决方案。(150字)

TxNet 1401

JavaSE学习笔记(3)

IO流: 作用: 复制各种类型文本(字节流 & 字符流) 读进来(input)、写出去(output) 流程: 源文件--读进来(FileInputStream输入流类)--中转--写出去(FileOutputStream输出流类)--目标 以Stream结尾的一般都是字节流。顶级类:InputStream、OutputStream 按字节传递 Reader/Writer结尾的一般是字符流。顶级类:Reade...

m0_57159494的博客 310

Monorepo与pnpm:前端项目管理的完美搭档

pnpm又称 performant npm,翻译过来就是高性能的npm。Monorepo是一种项目开发与管理的策略模式,它代表"单一代码仓库"(Monolithic Repository)。在Monorepo模式中,所有相关的项目和组件都被存储在一个统一的代码仓库中,而不是分散在多个独立的代码仓库中,这些项目之间还可能会有依赖关系。

m0_68271787的博客 2561

【新手向】从零开始学习Java(Day21)反射

一起从零开始成就Java大神

黎明前的黑暗最为深邃,但只要你坚持,曙光终会划破天际。 1310

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JAVAOOP-21 反射

JAVAOOP-21 反射 XML 什么是XML XML是一种可扩展的标记语言,标准通用标记语言的子集 ,从 HTML —> XHTML —> XML 发展而来。 使用的时候是以文件的形式存在,扩展名为xml。 XML文件的用途 数据交换:作为与编程语言、操作系统无关的数据格式,通过网络进行数据的交换。 数据存储:通常作为超小型数据库来看待,可以存储数据。 配置文件:配置文件本质上就是数据存储的一种应用,主要用于应用程序的配置存储。 文件格式:office文件也是使用xml技术进行了数据的存

温故。的博客 897

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Day21——反射

文章目录反射1. 动态语言2. 静态语言3. 反射(Reflection):1. 概述2. 理解3. 反射机制提供的功能4. 反射的优缺点5. 反射相关的常用 API6. Class 类1. 概述2. Class 的创建方式(获取 Class 类的实例)3. Class 类常用方法4. 可以有 Class 对象的类型5. Java 内存6. 类的加载过程1. 类的初始化2. 类加载器的作用3. 类...

S_numb的博客 345

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java笔记21——反射

反射的基础

m0_61608447的博客 301

java第21天--反射机制

lusiyang463的博客 173

第21天 反射

想象一下,你在一个房间里边,但你看不见自己,也不知道自己是谁。这时候你面前有一个镜子,你可以通过镜子的反射来观察自己。反射就像这面镜子。它让你能够检查、分析、修改Java中的对象、类、方法等使用情况:在通常情况下,我们编写的代码是固定的,执行的结果也是固定的。但是某些情况下我们不确定要创建什么类型的对象,也不确定要调用什么类型的方法。这些都通过运行时传递的参数决定。该机制叫做动态编程技术,也就是反射机制反射就是在过程中,对于任意一个类,都能知道这个类所有的属性和方法。

m0_56975565的博客 762

21.反射

什么是反射 在运行状态中,对于任意一个类,都能够知道这个类所有属性和方法 在运行状态中,对于任意一个对象,都能够调用它的任意一个方法和属性 这种动态获取信息以及动态调用对象方法的功能即java反射机制 具体点:反射就是把java类中各个成分映射成一个个Java对象,在类装载时完成 一个类中这些成员方法、构造方法、在加入类中都有一个类来描述,通过反射实例的方法获取这些类的实例,调用它...

dgqq33789的博客 158

21. 反射

Python 是一种动态语言,而反射(reflection)机制被视为动态语言的关键。反射机制指的是在程序的运行过程中,对于任意一个类,都可以知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意方法和属性。这种动态获取程序信息以及动态调用对象的功能称为。反射,本质上就是通过字符的形式去操作对象/模块中的成员。在 Python 中,我们可以通过四个内置函数去实现反射相关的功能。

flurry_heart的博客 410

21、java中的反射机制

先推荐安装一个 eclipse 的反编译插件  Enhanced Class Decompiler 是什么?        在说反射之前先说一下编译时类型和运行时类型,大家都知道List是一个接口,它是不可以被实例化的,但是可以通过多态实现:List list = new ArrayList(); 对于变量list来说编译时期他被声明为List类型,但是真正使用的确实ArrayList中的成员...

chaizepeng的博客 270

day21【反射、注解】

day21【反射、注解】 反馈和复习 1.这两天学的不好,没有信心了 2.写代码出现一些未知异常,怎么办??? 去百度 去google 请教别人 BIO: 同步阻塞的IO, 调用某个方法时,该方法没有完成程序不能继续向下执行 NIO: 同步非阻塞的IO,调用某个方法时,无论该方法是否完成,程序可以继续向下执行,后期需要自己写代码判断 AIO: 异步非阻塞的IO,调用某个方法时,无论该方法是否完成,...

qq_44845814的博客 503

00 21Java高级之反射应用案例

文章目录1 反射实例化对象2 反射与工厂设计模式3 反射与单例设计模式 1 反射实例化对象 2 反射与工厂设计模式 3 反射与单例设计模式

weixin_43762330的博客 465

21. Java 反射

Java 反射、静态加载和动态加载、类加载、Java程序在计算机中的三个状态

Kim-Hyunyeon的博客 278

21、注解和反射

一、注解概述 2.1、什么是注解 Annotation是从JDK5.0开始引入的新技术。 Annotation的作用: 不是程序本身,可以对程序作出解释。(这一点和注释(comment)没什么区别) 可以被其他程序(比如:编译器等)读取。 Annotation的格式: 注解是以"@注释名"在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(value=“unchecked”)。 Annotation在哪里使用? 可以附加在package, class, metho

coder_lcw的博客 224
上一篇: 20、网络编程
下一篇: 22、java8的其它新特性
wiscourper_
博客等级 码龄17年 1641粉丝 272原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值