以下是从别人文章上copy过来的,个人觉得容易理解
什么是反射(Reflection )?
主要是指程序可以访问、检测和修改它本身状态或行为的一种能力
如何理解呢“
通常编写一个类,想要访问此类时必须new一个对象,然后使用对象.方法名来访问
而反射无需new一个对象,直接采用java反射技术,访问类中的方法,属性并可以进行修改”
.java文件加载过程
JAVA机制反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
反射就是把java类中的各种成分映射成一个个的Java对象
例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。(其实:一个类中这些成员方法、构造方法、在加入类中都有一个类来描述)
类加载器会给每个java文件都创建一个Class对象,用来描述类,画个图:
反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作。例如它允许一个java的类获取他所有的成员变量和方法并且显示出来。
由此图可以看出,类在加载后,同时形成此类的一个Class对象(是此类的快照),通过获取到Class对象,可以获取到此类的所有方法和属性,并将获取到的方法和属性映射成各个独立的对象
将获取到的Class对象映射到程序中一个新的类,这个过程就称为反射