类装载器ClassLoader
一,作用
将一个java字节码文件装入JVM(java虚拟机)中,步骤如下:
(1)装载,查找和导入Class文件
(2)链接,校验、准备和解析步骤
①校验:检查载入Class文件的正确性
②准备:给类的静态变量分配存储空间
③解析:将符号引用转换为
(3)初始化,对类的静态变量,静态代码块执行初始化工作。
二,类装载器的分类
(1)ClassLoader(根装载器):负责装载JRE核心类库
(2)ExtClassLoader(拓展类装载器):ClassLoader的子类,负责装载JRE拓展目录ext中的JAR包
(3)AppClassLoader(应用类装载器):ExtClassLoader的子类,负责装载classpath路径下的类包
三,类实例、类描述对象和类装载器的关系如图:
每个类在JVM中都有一个对应的java.lang.Class对象,它提供了类的结构信息描述,数组、枚举、注解及基本java类型(如int、double等)。Class是对象在装载时,由JVM调用类装载器的defineClass()方法自动构造的。
四,JAVA反射机制
通过从Class对象中获取构造函数、成员变量、方法类等元素的反射对象,并以编程方式通过这些反射对象对目标类进行操作。常见的有以下主要反射类:
(1)Construcor:类的构造函数反射类,通过Class#getConstructs()方法获取类的所有构造函数反射对象数组Construcor[]。
(2)Method:类方法反射类,通过Class#getDeclaredMethods()方法获取类的所有方法反射类对象数组Method[]。
(3)Field:类的成员变量反射类,通过Class#getDeclaredFields()方法获取类的所有成员变量反射类对象数组Method[]。等等反射类。。。。