java 反射知识点整理

1.1 Class类
获取Class对象的三种方式:
方式一:通过Object类中的getObject()方法
Person p = new Person();
Class c = p.getClass();
方式二:通过 类名.class 获取到字节码文件对象(任意数据类型都具备一个class静态属性,看上去要比第一种方式简单)
Class c2 = Person.class;
方式三: 通过Class类中的方法(将类名作为字符串传递给Class类中的静态方法forName即可)。
Class c3 = Class.forName("Person");


1.2通过反射获取构造方法并使用
可通过Class类(字节码对象)中提供的方法获取构造方法:
方式一:返回一个构造方法
no.1(一般获取)   public Constructor<T> getConstructor(Class<?>... parameterTypes) 获取public修饰, 指定参数类型所对应的构造方法
no.2(暴力获取)   public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) 获取指定参数类型所对应的构造方法(包含私有的)


方式二:返回多个构造方法
no.1(一般获取)public Constructor<?>[] getConstructors() 获取所有的public 修饰的构造方法
no.2(暴力获取)  public Constructor<?>[] getDeclaredConstructors() 获取所有的构造方法(包含私有的)


1.2.1通过反射方式,获取构造方法,创建对象
1. 获取到Class对象
2. 获取指定的构造方法
3. 通过构造方法类Constructor中的方法,创建对象
public T newInstance(Object... initargs)


1.2.2通过反射方式,获取私有构造方法,创建对象
获取私有构造方法,步骤如下:
1. 获取到Class对象
2. 获取指定的构造方法
3. 暴力访问, 通过类Constructor的setAccessible(boolean flag)方法设置访问权限
4. 通过构造方法类Constructor中的方法,创建对象
public T newInstance(Object... initargs)
1.3通过反射获取成员变量并使用
方式一:返回一个成员变量
no.1(一般获取) public Field getField(String name) 获取指定的 public修饰的变量
no.2(暴力获取) public Field getDeclaredField(String name) 获取指定的任意变量
方式二:返回多个构造方法
no.1(一般获取) public Field[] getFields() 获取所有public 修饰的变量
no.2(暴力获取) public Field[] getDeclaredFields() 获取所有的变量 (包含私有)


1.3.1通过反射,创建对象,获取指定的成员变量,进行赋值与获取值操作
获取成员变量,步骤如下:
1. 获取Class对象
2. 获取构造方法
3. 通过构造方法,创建对象obj
4. 获取指定的成员变量(私有成员变量,通过setAccessible(boolean flag)方法暴力访问)
5. 通过类Field的方法,给指定对象的指定成员变量赋值或者获取值
赋值:public void set(Object obj, Object value)
在指定对象obj中,将此 Field 对象表示的成员变量设置为指定的新值
取值:public Object get(Object obj)
          返回指定对象obj中,此 Field 对象表示的成员变量的值

1.4通过反射获取成员方法并使用
参数1: name 要查找的方法名称; 参数2: parameterTypes 该方法的参数类型
方式一:返回一个方法
获取public 修饰的方法:
public Method getMethod(String name, Class<?>... parameterTypes)
获取任意的方法,包含私有的:
public Method getDeclaredMethod(String name, Class<?>... parameterTypes)
方式二:返回多个构造方法
public Method[] getMethods() 获取本类与父类中所有public 修饰的方法
public Method[] getDeclaredMethods() 获取本类中所有的方法(包含私有的)
1.4.1通过反射,创建对象,调用指定的方法
获取成员方法,步骤如下:
1. 获取Class对象
2. 获取构造方法
3. 通过构造方法,创建对象
  4. 获取指定的方法
  5. 执行找到的方法:
public Object invoke(Object obj,  Object... args) 
执行指定对象obj中,当前Method对象所代表的方法,方法要传入的参数通过args指定。


1.4.2通过反射,创建对象,调用指定的private 方法
获取私有成员方法,步骤如下:
1. 获取Class对象
2. 获取构造方法
3. 通过构造方法,创建对象
4. 获取指定的方法
5. 开启暴力访问
6. 执行找到的方法
public Object invoke(Object obj,  Object... args)
执行指定对象obj中,当前Method对象所代表的方法,方法要传入的参数通过args指定。































  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值