1. Class类
在Object类中定义了以下的方法,此方法将被所有子类继承:
public final Class getClass()//这是一个泛型方法
以上的方法返回值的类型是一个Class类,此类是Java反射的源头,实际上所谓反射从程序的运行结果来看也很好理解,即:可以通过对象反射求出类的名称。
- 对照镜子后可以得到的信息:某个类的属性、方法和构造器、某个类到底实现了哪些接口。对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象。一个 Class 对象包含了特定某个类的有关信息。
- Class本身也是一个类
- Class 对象只能由系统建立对象
- 一个类在 JVM 中只会有一个Class实例
- 一个Class对象对应的是一个加载到JVM中的一个.class文件
- 每个类的实例都会记得自己是由哪个 Class 实例所生成
- 通过Class可以完整地得到一个类中的完整结构(这个类所有构成成分)
2.Class类常用方法
3. 反射Class的理解
3.1. java.lang.Class:是反射的源头
- 我们创建了一个类,通过编译(javac.exe),生成对应的.class文件,我们创建了一个类,通过编译(java.exe),生成对应的.class文件,此.class文件加载到内存以后,就是一个运行时类,存在在缓存区。
3.2.反射的理解
- Class类就是相当于镜子一样,在我们正常的构建类的过程中,我们通常都是会先编写类的成员变量、方法、构造器等,然后在去new,使用其对象完成一些这个类具有的功能。 而因为有Class这一面镜子,我可以得到个运行时类的时候,去往回找到构成这个类的所有东西,如成员方法、变量等。
4.Dome
//java.lang.Class:是反射的源头
//每一个运行时类只加载一次!
@Test
public void test3() {
Person p = new Person();
//通过运行时类的对象,调用其getClass(),返回其运行时类
//如:通过小孩可以知道父母是谁
Class clazz = p.getClass();
System.out.println(clazz);//class testReact.Person
}