目录
加载类的过程需要从系统外部根据类名获取其二进制数据流,途径可以是外部文件,数据库或者从网络上download,接着把它们交给JVM,让虚拟机将这些数据转化成Class实例,这一过程通过ClassLoader类加载器来完成,ClassLoader只作用在类加载过程,获取二进制流交给JVM之后,接下来的连接和初始化等操作就不再参与了,对于ClassLoader,它是一个类,里面提供了一些方法来完成加载流程,例如
public Class<?> loadClass(String name) throws ClassNotFoundException方法,通过传入类名,获取该类的一个实例,如果无法找到这个类就会抛出ClassNotFoundException异常。还有
protected final Class<?> findLoadedClass(String name)方法根据类名查找返回已经被加载的类。除了一些方法外,还有一个重要的属性是parent字段,它用来表示当前ClassLoader的双亲,没错,ClassLoader不止一个,它们分了几个级。
ClassLoader分类
ClassLoader分类有四种,自顶向下依次为启动类加载器BootStrap ClassLoader、扩展类加载器Extension ClassLoader、应用类加载器App ClassLoader和自定义类加载器,一般情况下JVM会用到前三个,自定义类加载器由我们决定是否使用来扩展虚拟机获取Class二进制流数据的方式。

本文详细介绍了Java中的ClassLoader,包括其分类、双亲委派模式的工作原理以及加载类的过程。ClassLoader主要分为启动类加载器、扩展类加载器、应用类加载器和自定义类加载器。双亲委派模式确保了系统核心类由启动类加载器加载,防止类的冲突。文中还提供了加载示例,展示了如何通过修改JVM参数影响类的加载路径。
最低0.47元/天 解锁文章
6377

被折叠的 条评论
为什么被折叠?



