在Object类中定义了方法:public final Class getClass(),此方法将被所有子类继承。
(1)Class 本身也是一个类
(2)Class 对象只能由系统建立对象
(3)一个加载的类在 JVM 中只会有一个Class实例
(4)一个Class对象对应的是一个加载到JVM中的一个.class文件
(5)每个类的实例都会记得自己是由哪个 Class 实例所生成
(6)通过Class可以完整地得到一个类中的所有被加载的结构
(7) Class类是Reflection的根源,针对任何你想动态加载、运行的类,唯有先获得相应的 Class对象
Class类的常用方法
Java内存分析
① Object类的getClass()方法
② 静态属性class
③ Class类中静态方法forName()
案例:
运行结果:
调用forName()返回的是Class,后需要调用newInstance()实例化
方式一: 调用Class对象的newInstance()方法,条件:①类必须有一个无参数的构造器, ②类的构造器的访问权限需要足。
方式二:1)通过Class类的getDeclaredConstructor(Class … parameterTypes)取得本类的指定形参类型的构造器 2)向构造器的形参中传递一个对象数组进去,里面包含了构造器中所需的各个参数。 3)通过Constructor实例化对象
代码:
运行结果:
通过反射,调用类中的方法,通过Method类完成。
① 通过Class类的getMethod(String name,Class…parameterTypes)方法取得 一个Method对象,并设置此方法操作时所需要的参数类型。
② 之后使用Object invoke(Object obj, Object[] args)进行调用,并向方法中传 递要设置的obj对象的参数信息。
代码:
若原方法声明为private,则需要在调用invoke()方法之前,显示调用方法对象的setAccessible(true)方法,将可访问private的方法。
代码: