java9类加载器_Java 类加载器

1、介绍

类的加载必须由类加载器(java.lang.ClassLoader) 来完成。每个类对象都包含一个对定义它的 ClassLoader 的引用。

2、分类

类加载器分为4类:

1)引导类加载器 (Bootstrap ClassLoader):又称根类加载器

负责加再 java 的核心库 (JAVA_HOME/jre/lib/rt.jar等),是原生代码(C/C++)来实现的,并不继承自 java.lang.ClassLoader,所以通过 Java 代码获取引导类加载器对象将会得到null。

例:

String.class.getClassLoader();  // 返回 null

2)扩展类加载器 (Extension ClassLoader)

是 java.lang.ClassLoader 的子类,负责加载 java 的扩展库 (JAVA_HOME/jre/ext/*.jar)

3)应用程序类加载器 (Application ClassLoader)

是 java.lang.ClassLoader 的子类,负责加载 java 应用程序类路径 (classpath、java.class.path)下的内容

4)自定义类加载器

开发人员可以通过继承 java.lang.ClassLoader 类来实现自己的类加载器,以满足一些特殊的需求。

3、类加载器的加载过程是一个 双亲(parent)委托模式:

当“应用程序类加载器”接到一个加载任务时:

1)先搜索内存中是否已经加载过了,如果加载过了,就可以找到对应的 Class 对象,停止加载。

2)如果没有找到,把这个任务先提交给 “parent”,父加载器接到任务时,也重复(1)(2)的步骤

3)直到传给了根加载器,如果根加载器可以加载,就完成了。如果不能加载,往回传,依次每个加载器尝试在自己负责的路径下搜索,如果找到了,就直接返回Class 对象,如果一直回传到 ”应用程序类加载器“,还是没有找到。

就会报 ClassNotFoundException 异常。

这种委托模式的作用是:为了安全,防止开发人员写一个和核心类库一样的类。

4、使用类加载器获取类路径下的文件

注意,如果不是获取的当前类的类加载器,而是通过

ClassLoader.getSystemResourceAsStream() 这个静态方法来获取InputStream,在 Web 项目中会报 FileNotFoundException

2d7160251f57700980b88cf5f6e849cf.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值