Java反射

Java反射!

一、什么是反射

​ Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
​ 要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象。

反射其实就是把Java类中的各种成分映射为单个的Java对象

在这里插入图片描述

二、反射机制重要的相关类
含义
java.lang.Class代表整个字节码。代表一个类型,代表整个类。
java.lang.reflect.Field代表字节码中的属性字节码。代表类中的成员变量(静态变量+实例变量)。
java.lang.reflect.Constructor代表字节码中的构造方法字节码。代表类中的构造方法。
java.lang.reflect.Method代表字节码中的方法字节码。代表类中的方法。
三、Class类对象获取的方法
Class<?> Class.forName("完整类包名");	

Class 类提供的静态成员方法,根据用户提供的完整的包名.类名,获取对应数据类型的 Class 对象。注意是!静态方法

Class<? extends T> 任意类对象.getClass();
Class<T> 类名.class;

以上三种方式返回值类型皆为Class类型

四、反射实例化的对象

对象.newInstance()

newInstance()内部调用无参构造方法,必须保证无参构造方法存在才可以,否则需要抛出java.lang.InstantiationException异常。

五、Class类方法
方法名说明
public T newInstance()创建对象
public String getName()返回完整类名带包名
public String getSimpleName()返回类名
public Field[] getFields()返回类中public修饰的属性(非私有化)
public Field[] getDeclaredFields()返回类中所有的属性
public Field getDeclaredField(String name)根据属性名name获取指定的属性
public native int getModifiers()获取属性的修饰符列表,返回的修饰符是一个数字,每个数字是修饰符的代号(非私有化)
public Method[] getDeclaredMethods()返回类中所有的实例方法
public Method getDeclaredMethod(String name, Class<?>… parameterTypes)根据方法名name和方法形参获取指定方法
public Constructor<?>[] getConstructors()返回类中所有的构造方法(非私有化)
public Constructor getDeclaredConstructor(Class<?>… parameterTypes)根据方法形参获取指定的构造方法
public native Class<? super T> getSuperclass()返回调用类的父类
public Class<?>[] getInterfaces()返回调用类实现的接口集合
六、Constructor类常用方法
public String getName()

返回构造方法名

public T newInstance(Object … initargs)

创建对象【参数为创建对象的数据】

七、Method类常用方法
public String getName()

返回方法名

public Object invoke(Object obj, Object… args)

调用方法

invoke 方法返回值类型为 Object 类型,支持当前目标方法的返回值,如果执行目标方法没有返回值,invoke 最终返回 null

八、Field类常用方法
public String getName()

返回构造方法名

public void set(Object obj, Object value)

设置属性值

public Object get(Object obj)

读取属性值

注:当访问和修改私有化属性时需要设置权限

public void setAccessible(boolean flag)

默认false,设置为true为强制反射

同样的适用于当需要访问私有化方法时也需要设置该权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值