ClassLoader详解

阅读源码过程中发现了一些ClassLoader的影子,以前经常用它来加载资源(就是读配置文件),但是没有详细的看过它,这次详细了解一下。

ClassLoader详解

1. ClassLoader是什么

一句话总结:加载文件的类(哈哈,废话了)。

2. ClassLoader能干什么

返回stream,URl,加载定义注册class。

3. ClassLoader的分类
  • 启动类加载器(Bootstrap ClassLoader):
    这个类加载的是核心的类库,及JDK本身的代码,是无法被调用的。
    (ClassLoader接口中有一个方法getBootstrapResources,
    看名字应该是可以加载修改后JDK代码的,有兴趣的同学可以试试)

  • 扩展类加载器(Extendsion ClassLoader):
    这个类加载的是加载\lib\ext目录下的类库,开发者可以使用。

  • 应用程序类加载器(Application ClassLoader):
    这个类加载的是CLASSPATH的类库,开发者可以使用。

三个类的关系:启动类加载器----(父子)---->扩展类加载器----(父子)---->应用程序类加载器

4. ClassLoader怎么使用
这三个类只能看到使用,不能new出来。下面通过自己的class来使用它

public class Test {
    public static void main(String[] args) throws Exception {
        ClassLoader cl = Test.class.getClassLoader();
        System.out.println(cl);
        System.out.println(cl.getParent());
        System.out.println(cl.getParent().getParent());
       }
}
5. ClassLoader运行详解

 classLoader进行加载Class的时候,首先判断一下父类是不是为空,如果不为空,则使用父类的方法进行加载。

这样做的目的也容易理解,如果哪一天解析class的方式变化了,只需要将父类的方法修改一下就好了,子类什么都不要做。

这种方法也叫双亲委派(设计模式之一)。

posted @   Kotlin  阅读(1279)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
Live2D
点击右上角即可分享
微信分享提示
西雅图
14:14发布
西雅图
14:14发布
4°
东南风
2级
空气质量
相对湿度
92%
今天
3°/12°
周四
4°/11°
周五
2°/10°