将类的各个组成部分封装为其他对象,这就是反射机制。
Java中的反射机制是指
在运行状态中
,对于任意一个类都能够知道这个类所有的属性和方法;并且对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象方法的功能成为Java语言的反射机制。
让Java可以在运行时,根据传入的类名字符串,去执行这个类存在的方法。
举个例子,Java代码在计算机中经历的三个阶段:
source源代码阶段:此时刚刚编译为字节码,仍然保存在硬盘上。
Class类对象阶段:类加载器把Person.class字节码加载进内存。
对于java来说,万物皆对象,那么这时内存里会有一个Person这个类的类对象,也就是
Class类对象
,这个东西就很抽象。
在Java里面有个类叫做
Class
,它是来描述
所有字节码物理文件的一些共同特征和行为
。例如成员变量,构造方法,普通的成员方法。
Class类对象会对重点内容进行封装成成员变量:
成员变量 ——-> Field对象,Field[] fields
构造方法 ——-> Constructor对象,Constructor[] cons
成员方法 ——-> Method对象,Method[] methods
运行时阶段:这个时候类对象已经实例化成为了一个对象
可以在程序
运行过程中
,操作对象。例如:获取,设置
可以降低程序耦合性,提高程序的扩展性
1 2 3
|
Class cls1 = Class.forName("domain.Person"); System.out.println(cls1);
|
1 2 3
|
Class cls2 = Person.class; System.out.println(cls2);
|
1 2 3 4
|
Person p = new Person(); Class cls3 = p.getClass(); System.out.println(cls3);
|
1 2 3 4 5
|
System.out.println(cls1 == cls2); System.out.println(cls1 == cls3);
|