反射理解以及使用

1.什么是反射

反射是一种机制/功能,利用该机制/功能可以在程序运行过程中对类进行解剖并操作类中的构造方法,成员方法,成员变量(字段)。

2.获得Class的三种方式【重点】

  1. 对象.getClass()
  2. 使用Class类的forName(“类的全限定名”)最常见方式
  3. 使用类.class
    在这里插入图片描述

3.反射原理分析图

在这里插入图片描述

4.获取Class对象的信息

创建对象(依赖无参构造) 【掌握】
T newInstance() ; 创建此 Class对象所表示的类的一个新实例。等价与new对象
在日后开发中,配置文件中会存放对应对象信息,利用反射返回对应对象
1.简单案例:
Student类中有共有有参构造方法,使用此方法进行反射出对象类型
在这里插入图片描述

Class students = Class.forName("Students");//确定类型
        Constructor constructor = students.getConstructor(String.class, int.class);//确定构造
        Object stu = constructor.newInstance("张三", 12);//实例化对象
        System.out.println(stu);

2.Student类中有私有有参构造方法,使用此方法进行反射出对象类型,前提是需要暴力破解,否则会程序报错

Class students = Class.forName("Students");
        Constructor constructor = students.getDeclaredConstructor(String.class,int.class);
        constructor.setAccessible(true);//暴力破解
        Object stu = constructor.newInstance("张三", 12);
        System.out.println(stu);

5.构造方法的反射

关键字:Xxx代表Constructor
clazz.getXxxs();			//获得所有public类型构造方法
clazz.getDeclaredXxxs();	//获得所有声明的构造方法(含私有)
clazz.getXxx(类型...)			//获得指定参数列表public类型构造方法
clazz.getDeclaredXxx(类型...)	//获得指定参数列表声明的构造方法(含私有)

6.字段的反射

关键字:Xxx代表FieId
clazz.getXxxs()   所有public
clazz.getDeclaredXxxs()  所有声明(含私有)
clazz.getXxx(name)  获得指定名称public类型字段
clazz.getDeclaredXxx(name)  获得指定名称声明字段(含私有)

7.方法的反射【重要】

关键字:Xxx代表Method
clazz.getXxxs();   //获得所有的public类型方法 (含父类继承的)
clazz.getDeclaredXxxs() ;  //获得所有声明方法(含私有)
clazz.getXxx(name , 类型...)	;		//获得指定的public类型的方法
clazz.getDeclaredXxx(name , 类型..)  //获得指定的声明的方法(含私有)

7.1 方法中的常用方法

 Object invoke(Object obj, Object... args)
根据参数args调用对象obj的该成员方法
如果obj=null,则表示该方法是静态方法

案列分析:

两者等价
1.上图中,调用一个参数的方法,并invoke方法执行。如果方法没有返回值,则返回null;
在这里插入图片描述
2.上图中,调用两个参数的方法,并invoke方法执行。如果方法没有返回值,则返回null;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值