Java类加载机制和反射机制

开发工具与关键技术: MyEclipse 10、Java语法
作者:邓婵
撰写时间:2019年 6月 6日

类加载机制就是jvm把class文件加载到内存,并对数据进行校验、解析和初始化,最终形成jvm可以直接使用的java类型的过程。
要加载类首先获取类的加载器,然后通过加载器去加载类。
ClassLoader类加载器的作用就是将 .class 文件加载到JVM虚拟机中去。
例子:
Java类加载机制和反射机制
说明:ClassLoader是抽象的方法无法new的,要根据一个已知类去获取,因为main方法已经开始运行,所以我们可以用ClassLoaderDemo这个已知的类去.class拿到这个类的类信息,然后.getClassLoader()拿到这个类的加载器,通过你现在运行的这个类的自身去把加载器给拿出来。
常用三种方式加载类:
1.使用加载器.loadClass(“包名.类名”)来加载类,不会执行初始化块。
2.使用Class.forName(“包名.类名”),直接通过名字来加载类,默认会执行初始化块。
3.带三个参数的,Class.forName(“包名.类名”,是否执行初始化(true or false),传入加载器)。
执行结果如图下所示:
Java类加载机制和反射机制
反射其实就是动态加载一个指定的类,并获取该类中的所有的内容。而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员。简单来说就是通过反射,该类对我们来说是完全透明的,想要获取任何东西都可以。
一、 通过反射机制获取构造器
相关代码如图下:
Java类加载机制和反射机制
说明:首先反射的时候需要把类给加载进来,因为构造器是由修饰符、 名称和形参列表构成的,所以我们要一步一步地获取出来再进行拼接从而得到完整的构造器。需要注意的是getConstructors只能拿到你能访问到的构造器,私有的就拿不到,而getDeclaredConstructors能拿到全部的构造器。还有就是修饰符中constructor.getModifiers()返回的是Modifier,要想返回是你能看得懂的就要调用Modifier.toString(constructor.getModifiers())。
结果输出如图下所示:
Java类加载机制和反射机制
二、 通过反射机制获取方法
相关代码如图下:
Java类加载机制和反射机制
说明:因为方法是由修饰符、返回值、名称和形参列表构成的,所以我们要一步一步地获取出来再进行拼接从而得到完整的构造器方法。需要注意的是getMethods只能拿到你能访问到的方法,私有的就拿不到,而getDeclaredMethods能拿到全部的方法。其余的与获取构造器中的是基本一致的。
结果输出如图下所示:
Java类加载机制和反射机制
三、通过反射机制获取成员变量
相关代码如图下:
Java类加载机制和反射机制
说明:因为成员变量是由修饰符、数据类型和名称构成的,所以我们要一步一步地获取出来再进行拼接从而得到完整的成员变量。需要注意的是getFields只能拿到你能访问到的成员变量,私有的就拿不到,而getDeclaredFields能拿到全部的成员变量。
输出结果如图下所示:
Java类加载机制和反射机制