java反射笔记

在类加载完成后,通过反射来拿取这个类的完整的结构信息
通过反射,可以完整地获取一个类,包括该类的内部的各种信息

java.lang.Class :这个对象就是代表了一个加载后的类,使用这个对象,获取一个你需要的类的信息

Class clazz = Xxx.class;
clazz.getConstructor getMethod getParamter等等
对java.lang.Class的理解:每一个运行时类,就是一个Class实例
在这里插入图片描述

不使用反射,无法使用类内部的一些私有方法
通过反射可以调用(setAccessible(true))
因此,使用反射可以修改类的结构,修改方法的修饰符等等,改变类
但是这并不代表封装就是没用的,反射确实可以打破封装,在编译层面,但这在约定俗成的编程逻辑上是有问题的,一个方法是private,那么一定就是不希望别人去调用该方法,而是应该去调用写好的暴露在外的接口

获取Class实例的方式

1.Xxx.class
2.object.getClass()
3.forName(String classPath)
在最后还验证了Class是单例模式的(很好理解,因为运行时类是唯一的)
在这里插入图片描述
方法四:使用类加载器,classLoader.loadClass(String className)
在这里插入图片描述
哪些类型会有Class对象
在这里插入图片描述

ClassLoader了解(具体在jvm中讲) 类加载器作用,和提供的类加载器类型
在这里插入图片描述
可以通过反射获取整个类的完整结构(但是实际开发不会这么无聊……)

调用运行时类的指定结构(重点)
getDeclaredField(String fieldName) 获取运行时类中指定的属性

然后就可以自己设置属性值
在这里插入图片描述getDeclaredMethod(String MethodName,…args) 获取运行时类中指定的方法
后面的参数定义的是,该方法声明的形参列表(因为可能会有同名方法 Override和Overwrite
在这里插入图片描述
获取到method之后,使用method.invoke执行该方法(重要,之后动态代理也是invoke去执行方法)
在这里插入图片描述
调用静态方法:invoke里面的参数1,有变化,从一个类对象,变成了类本身(Xxx.class)
在这里插入图片描述
获取运行时类指定的构造器,里面的参数是指明构造器的参数列表
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值