反射2 - 类加载器
类加载器
Java的类主要分为3种
- Java核心类库:String, Object ...
- JVM软件平台开发商
- 自己声明定义的类:User, Child ...
相应的类加载器也有3种 -- Java17
- BootClassLoader 启动类加载器 -- 加载Java核心类库 -- 加载类时,采用操作系统平台语言实现
- PlatformClassLoader 平台加载器
- AppClassLoader 应用类加载器
相应的类加载器也有3种 -- Java8
- BootstrapClassLoader 是顶级加载器,默认加载的是%JAVA_HOME%中lib下的jar包和class类文件,他也是ExtClassLoader的父类,但是不是继承(extends)关系,是ExtClassLoder中有一个parent变量是BootstrapClassLoader
- ExtClassLoader 扩展类加载器,负责加载%JAVA_HOME%中lib/ext文件下的jar包和class类文件,ExtClassLoader加载器是AppClassLoader的父类,当然也不是继承(extends)关系,也是类中有parent变量
- AppClassLoader (应用程序加载器/系统类加载器)是自定义加载器的父类,负责加载classPath下的类文件,平时引用的jar包以及我们自己写的类都是这个加载器进行加载的,同时AppClassLoader还是线程上下文加载器,如果想实现一个自定义加载器的话就继承(extends)ClassLoader来实现
Java8
public class ClassLoader {
public static void main(String[] args) {
//TODO 类名.class 获取类信息
Class<Student> studentClass = Student.class;
//TODO .getClassLoader() 获取类加载器
java.lang.ClassLoader classLoader = studentClass.getClassLoader();
System.out.println(classLoader); //sun.misc.Launcher$AppClassLoader@18b4aac2
//String的加载器 -- 启动类加载器,加载类时,采用操作系统平台语言实现
Class<String> stringClass = String.class;
java.lang.ClassLoader classLoader1 = stringClass.getClassLoader();
System.out.println(classLoader1); //null
// 加载Java核心类库 > 平台类库 > 用户定义的类
// -- 下级可以获取上级,因为上级必须在下级前加载
System.out.println(classLoader.getParent()); //sun.misc.Launcher$ExtClassLoader@1b6d3586
System.out.println(classLoader.getParent().getParent()); //null
}
}
class Student{
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体