核心思想
对于每个类而言,JRE都会为其保留一个不变的Class类型的对象。一个Class对象包含了特定的结构(class、interface、enum、annotation、primitive type、void)等相关的信息
- class本身也是一个类
- Class对象只能由系统建立对象
- 一个Class对象对应的是一个加载到JVM中的一个class文件
- 每个类的实例都会记得自己是由哪个Class实例所生成
- 通过Class可以完整地得到一个类中所有被加载的结构
- Class类是Reflection的根源,针对任何你想动态加载、运行的类,唯有获得相应的Class对象
对象的创建过程本质
java中的对象主要分为两种:一种是普通类创建的实例对象;另一种是Class对象(只能有系统创建)。其实Java中的实例对象就是通过Class对象来创建的
获取class对象的方式
1 | public class Test03 { |
方式 | 代码 |
---|---|
通过对象获得 | Class aClass = person.getClass(); System.out.println(aClass.hashCode()); |
forName获得 | Class aClass1 = Class.forName(“Student”); System.out.println(aClass1.hashCode()); |
通过类名获得 | Class aClass2 = Student.class; System.out.println(aClass2.hashCode()); |
基本内置类型的包装类都有一个Type属性 | Class aClass3 = Integer.TYPE; System.out.println(aClass3); |
获得父类类型 | Class aClass4 = aClass1.getSuperclass(); System.out.println(aClass4.hashCode()); |
上三个输出的哈希值是相等的(打印顺序与上面一一对应):