阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第25章:ClassLoader类加载器:课时115:ClassLoader类加载器简介
程序员文章站
2022-07-04 19:10:14
...
在Java语言里面提供有一个系统的环境变量:CLASSPATH,这个环境属性的作用主要是在JVM进程启动的时候进行类加载路径的定义,在JVM里面可以根据类加载器而后进行指定路径中类的加载,也就是说找到了类的加载器就意味着找到了类的来源。
系统类加载器
如果说现在要想获得类的加载器,那么一定要通过ClassLoader来获取,而要想获取ClassLoader类的对象,则必须利用Class类(反射的根源)实现,方法:public ClassLoader getClassLoader(),当获取了ClassLoader 之后还可以继续获取其父类的ClassLoader 类对象:public final ClassLoader getParent()。
范例:观察类加载器
package cn.mldn.demo;
class Message {}
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
Class<?> clazz = Message.class;
System.out.println(clazz.getClassLoader()); // 获取当前的加载器
System.out.println(clazz.getClassLoader().getParent()); // 获取父类加载器
System.out.println(clazz.getClassLoader().getParent().getParent()); // null
}
}
程序执行结果:
jdk.internal.loader.ClassLoaders$AppClassLoader@119d7047
jdk.internal.loader.ClassLoaders$PlatformClassLoader@27973e9b
null
从JDK1.8之后版本(JDK1.9、JDK1.10)提供有一个“PlatformClassLoader”类加载器,而在JDK1.8及以前的版本里面提供的加载器为“ExtClassLoader”,因为在JDK的安装目录里面提供有一个ext的目录,开发者可以将*.jar文件拷贝到此目录里面,这样就可以直接执行了,但是这样的处理开发并不安全,最初的时候也是不提倡使用的,所以从JDK1.9开始将其彻底废除了,同时为了与系统类加载器和应用类加载器之间保持设计的平衡,提供有平台类加载器。
当你获得了类加载器之后就可以利用类加载器来实现类的反射加载处理。
推荐阅读
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第24章:反射与简单Java类:课时111:单级属性赋值
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第23章:反射与类操作:课时105:反射调用构造方法(含关系图-重要)
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第25章:ClassLoader类加载器:课时115:ClassLoader类加载器简介
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第12章:开发支持类库:课时49:ThreadLocal类
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第33章:集合工具类:课时149:Collections工具类
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第12章:开发支持类库:课时50:定时调度
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第1章:Java多线程编程:课时3:Thread类实现多线程
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第24章:反射与简单Java类:课时110:属性自动赋值实现思路
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第25章:ClassLoader类加载器:课时116:自定义ClassLoader处理类
-
Java语言基础-Java语言高级特性:ClassLoader类加载器;自定义ClassLoader处理类