Day4反射

本文介绍了Java反射机制的核心概念,包括运行时构造类对象、获取和修改成员变量与方法,以及通过Class对象、Constructor和Field/Method获取实例和信息。此外,还涵盖了如何处理泛型的真实类型以支持JSON反序列化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。是java被视为动态语言的关键。

Java反射机制主要提供了以下功能:
在运行时构造任意一个类的对象。
在运行时获取或者修改任意一个类所具有的成员变量和方法。
在运行时调用任意一个对象的方法(属性)。

获取Class对象的三种方式
1.通过类名获取 类名.class
⒉通过对象获取 对象名.getclass()
3.通过全类名获取 Class.forName(全类名)/classLoader.loadClass(全类名)

通过反射来生成对象主要有两种方式
1.使用Class对象的newInstance()方法来创建Class对象对应类的实例。
2.先通过Class对象获取指定的Constructor对象,再调用Constructor对象的newInstance()方法来创建实例。这种方法可以用指定的构造器构造类的实例。

得到构造器的方法
Constructor getConstructor(Class[] params)-- 获得使用特殊的参数类型的public构造函数(包括父类)
Constructor[] getConstructors() --获得类的所有公共构造函数
Constructor getbeclaredConstructor(Class[] params)--获得使用特定参数类型的构造函数(包括私有)
Constructor[] getDeclaredConstructors() -- 获得类的所有构造函数(与接入级别无关)

获得字段信息的方法
Field getField(String name) --获得命名的公共字段
Field[] getFields() --获得类的所有公共字段
Field getDeclaredField(string name)--获得类声明的命名的字段
Field[] getDeclaredFields() --获得类声明的所有字段

获得方法信息的方法
Method getMethod(String name,class[] params)--使用特定的参数类型,获得命名的公共方法
Method[ ] getMethods() --获得类的所有公共方法
Method getDeclaredMethod(String name,/class[] params)--使用特写的参数类型,获得类声明的命名的方法
Method[ ] getDeclaredMethods()-获得类声明的所有方法

反射获取泛型真实类型
当我们对一个泛型类进行反射时,需要的到泛型中的真实数据类型,来完成如json反序列化的操作。此时需要通过Type体系来完成。Type接口包含了一个实现类(Class)和四个实现接口,他们分别是:
TypeVariable 泛型类型变量。可以泛型上下限等信息
ParameterizedType 具体的泛型类型,可以获得元数据中泛型签名类型(泛型真实类型)
GenericArrayType 当需要描述的类型是泛型类的数组时,比如List,Map[],此接口会作为Type的实现
wildcardType 通配符泛型,获得上下限信息

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值