反射笔记记录

反射:将类的各个组成部分封装为其他对象,这就是反射机制
在这里插入图片描述
好处:
    1.可以在程序运行过程中,操作这些对象
    2.可以解耦,提高程序的可扩展性

获取Class对象的方法:
    1.Class.forName("全类名"):将字节码文件加载进内存,返回Class对象
        (多用于配置文件,将类名定义在配置文件中。读取文件,加载类)
    2.类名.class : 通过类名的属性class获取
        (多用于参数的传递)
    3.对象.getClass() : getClass() 方法在object类中定义着
        (多用于对象的获取字节码的方式)
结论:同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。
在这里插入图片描述
Class对象功能:

获取功能:
1.获取成员变量们

Field[ ] getFields();                //获取所有public修饰的成员变量
Field  getField(String name);     //获取指定名称的public修饰的成员变量

Field[ ] getDeclaredFields();       //获取所有的成员变量,不考虑修饰符
Field getDeclaredField(String name);

2.获取构造方法们

Constructor<?> [ ] getConstructors();
Constructor<T> getConstructor(<?>...parameterTypes);    //参数为不同参数的Class对象  例String.class   int.class

Constructor<?>[ ] getDeclaredConstructors();
Constructor<T> getDeclaredConstructor(<?>...parameterTypes);

3.获取成员方法们

Method[ ] getMethods();
Method getMethod(String name,<?>...parameterTypes);           //String name  方法名   

Method[ ] getDeclaredMethods();
Method getDeclaredMethod(String name,<?>...parameterTypes);   //类<?>...parameterTypes   可变参

4.获取类名

String getName();

注:暴力反射:

属性/方法对象.setAccessible(true);

例:
field.setAccessible(true);
constructor.setAccessible(true);
method.setAccessible(true);

暴力反射使用方法:

Class personClass=Person.classField d = personClass,getDeclaredField("d");
d.setAccessible(true);      //忽略访问权限修饰符的安全检查
Preson p = new Person();   
Object value = d.get(p);    //参数为Object

Field :成员变量 对象
    操作:
        1.设置值
            void set (object obj, object value);
        2.获取值
            get (object obj);

Constructor:构造方法 对象
    创建对象:
        1. T newInstance(Object ...initargs);
        2.如果使用空参数构造方法创建对象,操作可以简化:
            personClass.instance();
实例:

1.Constructor constructor1 = personClass.getConstructor();
   Object person1 = constructor1.newInstance();
   
2.Object person2 = personClass.newInstance();

Method:方法 对象
    执行方法:
        object invoke (Object obj, object ...args);
    获取方法名称
        String getName:获取方法名

获取类名:

String className = personClass.getName;  //全类名 (包名.类名)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hvk_l

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值