一.为什么使用反射(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对象


二.使用反射创建对象