类加载器

Bootstrap ClassLoader

        最顶层的类加载器,主要加载核心类库

Extention ClassLoader

        扩展的类加载器

AppClass Loader

        又叫SystemAppClass,加载当前应用的classpath的所有类

 

一个ClassLoader创建时如果没有指定parent,那么它的parent默认就是AppClassLoader

 

AppClassLoader的parent是ExtClassLoader,ExtClassLoader的parent是null

 

BootStrap ClassLoader是由C++编写的,是虚拟机的一部分

 

委托模式

        双亲委托

        某个class加载的过程:

        ①AppClassLoader去查找缓存,有则从缓存获取,没有就委托给父类加载器(ExtClassLoader);

        ②ExtClassLoader重复AppClassLoader的步骤,有就获取,没有就委托给父类加载器(BootStrapClassLoader);

        ③BootStrapClassLoader重复步骤,有就获取,没有就从sun.mic.boot.class路径下面查找,找到了就返回,没有找到就让子加载器(ExtClassLoader)自己去查找;

        ④ExtClassLoader去自己的java.ext.dirs路径下去找,找到返回,没找到让子加载器(AppClassLoader)去找;

        ⑤AppClassLoader去自己的java.class.path路径下找,找到返回,没有就让子类找,没有子类就抛出异常

 

ContextClassLoader

 

 

自定义类加载器

        继承ClassLoader类

        重写findClass()方法

        在findClass()方法中调用defineClass()方法

Tip:defineClass()方法可以将二进制内容转换成Class对象

 

解密类加载器

        定义一个类加载器来对特定的class文件进行加载(其中包含解密或其他特定过程);

        例如一个特定的类SpecialTest.class是经过加密后得到的class文件,此时可以定义一个特定的ClassLoader来对器进行解析,解析的过程中就会去解密相应的部分。

 

结论:这样的类只能被定义的特定类加载器加载,提高了程序的安全性

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值