11分钟学会Java反射的整理和理解


本人博客: https://blog.onfree.cn (●ˇ∀ˇ●)

11分钟学会Java反射的整理和理解

星星在你的头顶上闪耀着,与你交互诉说的话语,一句一句地,如同星点般翩然落至眼前


一、简介

JAVA反射机制是在运行状态中.
对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性.

我们创建的每一个类也都是对象,即类本身是java.lang.Class类的实例对象。这个实例对象称之为类对象,也就是Class对象,或者类类型。

二、方法:

1.如何获取.Class文件对象
a.  通过Object类 getClass()方法获取 Class对象

b. 通过类名.class 方式 获取 Class对象

c.  通过反射的方式, Class.forName(String classname) 获取Class对象
public static Class<?> forName(String className)throws ClassNotFoundException
返回与带有给定字符串名的类或接口相关联的 Class 对象
2.通过反射,获取类中的构造方法,并完成对象的创建
  • 获取指定的构造方法

    public Constructor getConstructor(Class<?>… parameterTypes)

  • 获取指定的public修饰的构造方法

    public Constructor getDeclaredConstructor(Class<?>… parameterTypes)

  • 获取指定的构造方法,包含私有的

    public Constructor getConstructor(Class<?>… parameterTypes)

  • 获取所有的构造方法

    public Constructor<?>[] getConstructors() 获取所有的public 修饰的构造方法
    public Constructor<?>[] getDeclaredConstructors() 获取所有的构造方法,包含私有的

3.通过反射, 获取类中的构造方法,并完成对象的创建
步骤:
a.获取字节码文件对象
b.通过字节码文件对象 ,获取到指定的构造方法
    getConstructor(参数);
c.通过构造方法,创建对象
    public T newInstance(Object... initargs)
4.私有构造方法,创建对象
a.获取字节码文件对象
b.通过字节码文件对象 ,获取到指定的构造方法
    getDeclaredConstructor (参数);
c.暴力访问
     con.setAccessible(true);
d.通过构造方法,创建对象
     public T newInstance(Object... initargs)
5.通过反射,获取Class文件中的方法
  • 获取指定的方法

    public Method getMethod(String name, Class<?>… parameterTypes)

  • 获取指定的public方法

    public Method getDeclaredMethod(String name, Class<?>… parameterTypes)

  • 获取指定的任意方法,包含私有的

    获取所有的方法:
    public Method[] getMethods()

    获取本类与父类中所有public 修饰的方法:
    public Method[] getDeclaredMethods()获取本类中包含私有的所有的方法

// 数组表示:new Class[]{String.class, String.class}

6.通过反射,调用方法
步骤:
a.获取Class对象
b.构造方法,创建对象
c.取指定的public方法
d.行方法
public Object invoke(Object obj, Object... args)
7.私有方法的调用:
a,获取Class对象
b,获取构造方法,创建对象
c,获取指定的private方法
d,开启暴力访问
m5.setAccessible(true);
e,执行方法
public Object invoke(Object obj, Object... args)
8.通过反射,获取成员变量
  • 获取指定的成员变量

    public Field getField(String name)

  • 获取public修饰的成员变量

    public Field getDeclaredField(String name)

  • 获取任意的成员变量,包含私有

    public Field[] getFields()

  • 获取所有public修饰的成员变量

    public Field[] getDeclaredFields()

9.通过反射,获取成员 变量,并赋值使用
步骤:
a. 获取字节码文件对象
b. 获取构造方法,创建对象
c. 获取指定的成员变量
d. 对成员变量赋值获取值操作
public void set(Object obj, Object value) // 赋值
public Object get(Object obj) // 获取值
10.私有成员变量的使用
步骤:
a. 获取字节码文件对象
b. 获取构造方法,创建对象
c. 获取指定的成员变量
d. 开启暴力访问
e. 对成员变量赋值获取值操作
public void set(Object obj, Object value) //赋值
public Object get(Object obj) //获取值

本博客原文:https://blog.onfree.cn/posts/33aa4888.html
转载请申明原作者,谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值