其他
java类加载的过程概述
本文为看雪论坛优秀文章
看雪论坛作者ID:上火喝王老吉
一. 类的加载概述
(1)验证是否有正确的内部结构,并和其他类协调一致。
(2)准备负责为类的静态成员分配内存,并设置默认初始化值。
(3)解析将类的二进制数据中的符号引用替换为直接。
二. 类加载时机
1. 创建类的实例。
2. 访问类的静态变量,或者为静态变量赋值。
3. 调用类的静态方法。
4. 初始化某个类的子类。
5. 直接使用java.exe命令来运行某个主类。
6. 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象。
三. 类加载器的概述和分类
(1)装载:查找和导入Class文件;
校验:检查载入Class文件数据的正确性; 准备:给类的静态变量分配存储空间; 解析:将符号引用转成直接引用;
(3)初始化:对类的静态变量,静态代码块执行初始化操作
(4)当JVM启动时,会形成由三个加载器组成的初始类加载器层次结构:
Bootstrap ClassLoader 根类加载器 Extension ClassLoader 扩展类加载器 System ClassLoader 系统类加载器
2. 类加载器的作用
Extension ClassLoader负责加载JRE拓展目录中的JAR包的类,它的父类加载器是跟类加载器。在JDK中JRE的lib目录下ext目录。
System ClassLoader负责在JVM启动时加载来自Java命令的-classpath选项、java.class,path系统属性,或CLASSPATH指定的jar包和类历经。系统可通过ClassLoader的静态方法或区该系统类加载器。如果没有特别指定,则用户自定义的类加载器都已类加载器作为父加载器。
四. 反射概述
获得Class对象通常有三种方式:
(1)使用Class类的forName(String clazz)静态方法。
(2)调用某个类的class属性来获取该类的的Class对象。
(3)调用某个对象的getClass()方法,该方法是Object类的一个方法。
五. 通过反射获取带参和
不带参的构造方法并使用
六. 通过反射获取成员变量并使用
2. 如果是私有的可以用getDeclaedField("name")方法获取。
3. 通过set(obj, "李四")方法可以设置指定对象上该字段的值。
七. 通过反射获取方法并使用
小结
1. 类加载器
过程:验证、准备、解析。
作用:装载class。
反射字段:getField。
反射方法:getMethod、getDeclaredMethod。
看雪ID:上火喝王老吉
https://bbs.pediy.com/user-home-880306.htm
*本文由看雪论坛 上火喝王老吉 原创,转载请注明来自看雪社区。
推荐文章++++
求分享
求点赞
求在看