开发者学堂课程【Java 高级编程: ClassLoader 类加载器简介】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/20/detail/391
ClassLoader 类加载器简介
简介:
1、具体内容
2、系统类加载器
具体内容:
在 Java 语言里面提供有一个系统的环境变量:CLASSPATH,这个环境属性的作用主要是在 JVM 进程启动的时候进行类加载路径的定义,在 JVM 里面可以根据类加载器而后进行指定路径中类的加载,换一种说法找到了类的加载器就意味着找到了类的来源。
系统类加载器:
如果说现在要想获得类的加载器,那么一定要通过 ClassLoader 来获取,而要想获取ClassLoader 类的对象,则必须利用 Class 类(反射的根源)实现。
方法:public ClassLoader getClassLoader();
当获取了 ClassLoader 之后还可以继续获取其父类的 ClassLoader 类对象: p
ublic final ClassLoader getParent().
范例:观察类加载器
package cn.mldn. demo;
class Message i
public class avaAPIDemo i
public static void main(string[ ] args) throws Exception {
class<?> clazz = Message.class ;
system.out.println(clazz.getclassLoader());//获取当前类的加载器
System.out.println(clazz.getClassLoader().getParent());//获取父类加载器
}
}
程序执行结果:
jdk.internal.loader.ClassLoaders$AppClassLoader@6659c656
jdk.internal.loader.ClassLoaders$PlatformClassLoader@5d3411d
null
从 JDK 1.8 之后的版本(JDK1.9、JDK1.10)提供有一个‘PlatformClassLoader”类加载器,而在 JDK1.8 及以前的版本里面提供的加载器为“ExtClassLoader”,
因为在 JDK 的安装目录里面提供有一个 ext 的目录,开发者可以将 *.jar 文件拷贝到此目录里面,这样就可以直接执行了。
但是这样的处理开发并不安全,最初的时候也是不提倡使用的,所以从 JDK 1.9 开始将其彻底废除了,同时为了与系统类加载器和应用类加载器之间保持设计的平衡,提供有平台类加载器。
当你获得了类加载器之后就可以利用类加载器来实现类的反射加载处理。