Java中的反射和类加载机制
分类:
文章
•
2024-05-06 10:45:53
- 反射机制
当我们拿到一个.class文档对它一无所知,但文档本身就记录了许多信息。Java在需要使用到某个类时才会将.class文档载入,在JVM产生java.lang.Class实例代表该文档,从Class实例开始,就可以获得到类的许多类型信息。.class文档反映了类基本信息,因而从Class等API取得类信息的方式就称为反射。
Java.lang.Class类没有公开的构造函数,实例是由JVM自动产生的,每个.class文档加载时,JVM会自动生成对应的Class对象,在取得Class对象后,就可以操作Claas对象的公开方法取得类基本信息,但是也可以通过以下三种方式来获取到每个对象对应的Class对象:
1.1 通过Object的getClass()方法
1.2 通过.class常量
1.3 通过Class.forName()动态加载类,事先不知道类的名称,可以利用这个方法来动态加载.class文档,取得Class对象后,利用newInstance()方法建立类的实例。
那么,获取到了Class的对象,就可以获取类的信息,动态的操作对象的方法和成员
列如,有一个Student类:
如何运用反射动态获取到Student的类信息呢?以下代码是动态生成Student实例,并且调用了Student类的私有方法setVuale ()的方法,其中要注意的地方,对应私有的成员要用setAccessible(true)方法打破权限:
- ClassLoader类加载器
类加载器都是继承自抽象类java.lang.ClassLoader,每个.class文档加载后,都会有个Class实例来代表。可以由Class的getClassLoader()取得加载对应.class文档的ClassLoader实例,而ClassLoader类加载器的作用就是将.class文件加载到JVM中去。
以下是常用的三种加载类的方式: