类加载器
Posted gorgeousbankarian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类加载器相关的知识,希望对你有一定的参考价值。
什么是类加载器
有几种
- 启动类加载器 Bootstrap (C++)
加载最基本的Java类,例如Java.lang中的类,提供用户的基本使用环境,是根加载器。
- 拓展类加载器 Extension? (Java)
加载的是随着时代变化,新添加到Java中的拓展类,例如Javax库中的类就是由其加载。
- 应用程序类加载器 AppClassLoader
用户自定义的类加载。
Test t = new Test();
t.getClass().getClassLoader().getParent().getParent(); => null (Bootstrap)
t.getClass().getClassLoader().getParent(); => ExtClassLoader
t.getClass().getClassLoader(); => AppClassLoader
双亲委派
双亲委派就是指类加载的过程中,先不会加载本类,而是先把加载请求委派给父类。所以实际上类的加载是自顶向下,从最顶部的启动类加载器部分开始找,先到先得。
优先往上找,先到先用。作用是保护源代码,防止用户定义的重名的类污染Java原生代码。
沙箱安全
双亲委派就是为了沙箱安全机制,保护原生Java的源码
以上是关于类加载器的主要内容,如果未能解决你的问题,请参考以下文章
活动(加载器 - 下载)+ 3 个片段(使用加载器 - 计算)
用于在多个活动/片段中重用的全局加载器 (LoaderManager)
Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段
Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段