Java:反射

反射:

被称为框架的灵魂 ==》在反射面前一切是裸体
框架:半成品 使用框架来进行开发会减少代码量

反射: 将各个类的个每一部分封装成一个对象 Class 对象

好处:
1.可以修改正在运行的代码 (热修复) ==>也就是通过反射技术来修改你上线的bug 阿里 改的是二进制 腾讯的
2.所有框架的编写必须用到这个

Class 对象: 1.如何来获取这个Class 对象

有三种方式来获取Class 对象
第一种 (根本不用)
Student student = new Student();
Class c = student.getClass();

第二种: Class c1 = Student.class;

第三种: Class c2 = Class.forName(“com.offcn.day24.test.Student”); 参数传递的是完整的包名加上类名

获取所有构造方法:
public Constructor<?>[] getConstructors() 获取所有的公有的构造
public Constructor<?>[] getDeclaredConstructors() 获取所有的构造,包含私有(受保护的)
public Constructor getConstructor(Class<?>… parameterTypes) 获取是当个公有的构造,参数是构造参数的数组,
public Constructor getDeclaredConstructor(Class<?>… parameterTypes) 获取私有的构造方法

注意点:1.带参数的构造传递的是 类型的.class 文件
注意点2: public static void setAccessible( boolean flag) 暴力反射,去除私有

… 表示可以传递多个参数
public T newInstance() 表示实例化一个对象

获取方法:
public Method[] getMethods() 获取所有公有的方法(同时也会获取到父类公有的方法)
public Method[] getDeclaredMethods() 获取所有的包括私有的方法(不包含父类的)
public Method getMethod(String name,Class<?>… parameterTypes) 获取单个公有的方法 第一个参数是方法的名称 第二个参数是方法类型的class
public Method getDeclaredMethod(String name,Class<?>… parameterTypes)
public Object invoke(Object obj,Object… args) 调用其方法 第一个参数 是对象 ,第二个参数: 方法的具体的参数

错误是: class com.offcn.day24.test.Student with modifiers “private” 也就是没有除去私有

构造与方法的反射调用可以知道:
1.所有获取私有Declared
2. 所有的私有都要进行暴力反射,
3.在得到构造或者是方法的时候都传递的是类型的 class,只有在调用的时候传递的才是具体的值了

获取属性:
public Field[] getFields() 获取所有公有的属性
public Field[] getDeclaredFields() 所有所有的属性(包含私有的)
public Field getField(String name) 获取当个公有的属性 参数:属性的名称
public Field getDeclaredField(String name) 获取私有的属性

Field 的方法
设置值:
public void set(Object obj,Object value) d第一个参数是对象,第二个参数是具体赋的值
取值:
第一种取值的方法 Object obj = c2.newInstance(); Student student = (Student) obj;
第二种取值的方法是 : public Object get(Object obj) 参数传递的是对象

反射的强大之处: 需求: 创建任意的对象,调用其方法, 不能修改java代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值