一.为什么使用反射(Reflection)
目的: 写通用性的代码 例如框架 需求: 写一个方法 该方法可以接收"任意类型"的对象 该方法的功能是展示对象的绝活
输入参数: Object
返回值: void
功能: 展示一下绝活
A公司的程序员public void test(Object obj){if(学生){
Student s = (Student)obj; s.study(); }else if(老师){ Teachet t = (Teacher)obj; t.teach(); }else if(凹凸曼){ 凹凸曼 t = (凹凸曼)obj; t.打小怪兽(); }else if(厨师){ 厨师 t = (厨师)obj; t.cook(); } }
其他公司的用户使用
只能兼容学生、老师、凹凸曼三种类型, 用户每加一个需求,例如加一个厨师, test就需要发生改变
如果用户需求一变,框架的代码也要随着升级的话,这样的代码是不是弱爆了!
问题: 开发框架的程序员 不知道以后的用户 如何使用,传入什么类型的对象以及对象到底有哪些方法,
换句话说 编译的时候 不能够推断 运行的时候 到底传入哪种类型的对象 以及对象有哪些方法...
编译期间决定不了,只能在运行的时候 通过某种手段 获取出该对象 到底有哪些方法 从而调用该对象的指定方法 使用反射可以解决!!
二. Class类的对象
每一个类 在 第一次使用的时候 需要进行类加载 ,类加载的同时 会在堆中 产生该类所对象的Class对象
Student类 Student类的Class对象
Teacher类 Teacher类的Class对象
这个Class对象是类的一面镜子,通过该对象可以知道 该类有哪些构造函数、哪些属性、哪些方法....从而使用Class对象来创建该类的对象、访问属性、调用方法
第一次使用类
1.使用该类创建对象的时候
2.类名.静态方法
3.类名.属性
*****************************************如何使用反射********************************************
一.如何获得类所对应的Class对象 二.使用反射创建对象