Java基础反射reflect

本文深入解析Java反射机制,涵盖Class、Constructor、Method和Field类的使用,以及如何在运行时分析类、创建对象和调用方法。通过反射,Java程序能获取并操作类的内部结构,实现动态编程。

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

概述
能够分析类能力的程序成为反射reflective。反射机制的功能及其强大,再下面可以看到,反射机制可以用来:

在运行时分析类的能力
在运行时查看对象,例如,编写一个toString()方法供所有类使用。
实现通用的数组操作代码。
利用Method对象,这个对象很像C++中的指针函数。
Class类
在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识。这个信息跟踪着每个对象所属的类。

获取类字节码方式
Class.forName(); 静态方法调用
Class<?> forName = Class.forName("path");

类型.class
Class<?> cls = Person.class;

对象.class
Person person = new Person();
Class<?> cls = person.class;

常用方法
// 返回描述类名为className的Class对象
static Class forName(String className);

// 返回类的实例对象,调用的是默认无参构造方法
Object newInstance();

Constructor类
/**
* 构造一个这个构造器所属类的新实例
* @param args 这个构造方法所需的形式参数
*/
Object newIntance(Object[] args);

/**
* 获取字节码中所有公开的构造方法
*/
Constructor[] getConstructors();

/**
* 获取所有的构造的方法,包括private修饰的
*/
Constructor<?>[] getDeclaredConstructors();

/**
* 获取指定形参类型,和数量的公开的构造方法
*/
Constructor<T> getConstructor(Class<?>... parameterTypes);

/**
* 获取指定形参类型,和数量的任何修饰符的构造方法
*/
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes);

Method类
/**
* 获取所有公开方法
*/
Method[] getMethods();

/**
* 获取所有方法,包括私有方法
*/
Method[] getDeclaredMethods();

/**
* 获取公开方法
* @param name 方法的名称
* @param parameterTypes 形式参数
*/
Method getMethod(String name, Class<?>... parameterTypes)

/**
* 获取指定方法,包括私有方法
* @param name 方法的名称
* @param parameterTypes 形式参数
*/
Method getDeclaredMethod(String name, Class<?>... parameterTypes)
/**
* 调用方法
* @param obj 方法被调用对象
* @param args 形式参数列表
*/
Object invoke(Object obj, Object... args)

Field类
/**
* 获取所有公开成员变量
*/
Field[] getFields();

/**
* 获取所有成员变量
*/
Field[] getDeclaredFields()

/**
* 获取指定名称的公开的成员变量
*/
Field getField(String name)

/**
* 获取指定名称的成员变量
*/
Field getDeclaredField(String name)

/**
* 设置obj指定成员变量值value
* @param obj 需要修改的变量
* @param value 修改的值
*/
void set(Object obj, Object value)

/**
* 获取obj对象的指定成员变量值
*/
Object get(Object obj)

暴力反射
Field name = forName.getDeclaredField("name");
name.setAccessible(true);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值