我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么在Android中利用ClassLoader对类进行加载

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么在Android中利用ClassLoader对类进行加载

本篇文章给大家分享的是有关怎么在Android中利用ClassLoader对类进行加载,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

Java的类加载设计了一套双亲代理的模式,使得用户没法替换系统的核心类,从而让应用更安全。所谓双亲代理就是指,当加载类的时候首先去Bootstrap中加载类,如果没有则去Extension中加载,如果再没有才去AppClassLoader中去加载。从而实现安全和稳定。

Java ClassLoader

BootstrapClassLoader

引导类加载器 ,用来加载Java的核心库。通过底层代码来实现的,基本上只要parent为null,那就表示引导类加载器。

比如:charsets.jar、deploy.jar、javaws.jar、jce.jar、jfr.jar、jfxswt.jar、jsse.jar、management-agent.jar、plugin.jar、resources.jar、rt.jar

ExtClassLoader

拓展类加载器 ,用来加载Java的拓展的类库, ${JAVA_HOME}/jre/lib/ext/ 目录中的所有jar。

比如:cldrdata.jar、dnsns.jar、jfxrt.jar、localedata.jar、nashorn.jar、sunec.jar、sunjce_provider.jar、sunpkcs11.jar、zipfs.jar等等

AppClassLoader

系统类加载器 (不要被名字给迷惑),用来加载Java应用中的类。一般来说自己写的类都是通过这个加载的。而Java中 ClassLoader.getSystemClassLoader() 返回的就是AppClassLoader。(Android中修改了ClassLoader的逻辑,返回的会是一个PathClassLoader)

自定义ClassLoader

用户如果想自定义ClassLoader的话,只需要继承自 java.lang.ClassLoader 即可。

ClassLoader中与加载类相关的方法:

  1. getParent() 返回该类加载器的父类加载器。
  2. loadClass(String name) 加载名称为 name的类,返回的结果是 java.lang.Class类的实例。
  3. findClass(String name) 查找名称为 name的类,返回的结果是 java.lang.Class类的实例。
  4. findLoadedClass(String name) 查找名称为 name的已经被加载过的类,返回的结果是 java.lang.Class类的实例。
  5. defineClass(String name, byte[] b, int off, int len) 把字节数组 b中的内容转换成 Java 类,返回的结果是 java.lang.Class类的实例。这个方法被声明为 final的。

也许你不太了解上面几个函数的区别,没关系,我们来看下源码是如何实现的。

//ClassLoader.javaprotected Class<&#63;> loadClass(String name, boolean resolve)  throws ClassNotFoundException{    // First, check if the class has already been loaded    Class c = findLoadedClass(name);    if (c == null) {      long t0 = System.nanoTime();      try {        if (parent != null) {          c = parent.loadClass(name, false);        } else {          c = findBootstrapClassOrNull(name);        }      } catch (ClassNotFoundException e) {        // ClassNotFoundException thrown if class not found        // from the non-null parent class loader      }      if (c == null) {        // If still not found, then invoke findClass in order        // to find the class.        long t1 = System.nanoTime();        c = findClass(name);        // this is the defining class loader; record the stats      }    }    return c;}

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么在Android中利用ClassLoader对类进行加载

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么在Android中利用ClassLoader对类进行加载

本篇文章给大家分享的是有关怎么在Android中利用ClassLoader对类进行加载,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java的类加载设计了一套双亲代理的模式,使
2023-05-31

怎么在Android 开发中利用TextView对文字进行加粗

这篇文章将为大家详细讲解有关怎么在Android 开发中利用TextView对文字进行加粗,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。首先自定义一个StyleSpan,在StyleSpan
2023-05-31

怎么在Android中利用 ksoap2对WebService进行调用

本篇文章给大家分享的是有关怎么在Android中利用 ksoap2对WebService进行调用 ,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.下载 ksoap2 的 ja
2023-05-30

Android应用中怎么对超大的图片进行加载

本篇文章为大家展示了Android应用中怎么对超大的图片进行加载,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 1.Bitmap的使用- 2.Android手机中加载图片的原理   有的时候,我们加
2023-05-31

怎么在Android中利用 listview对数据进行显示

怎么在Android中利用 listview对数据进行显示?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Android listview数据显示及提示信息的实例最近我们测试人
2023-05-31

Android应用中怎么对本地pdf文件进行加载

这篇文章给大家介绍Android应用中怎么对本地pdf文件进行加载,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。大部分app打开pdf文件是通过intent调起手机中能打开pdf文件的工具,来查看pdf文件,如果需求是
2023-05-31

怎么在Android中利用SpannableString对内容进行格式化

这篇文章将为大家详细讲解有关怎么在Android中利用SpannableString对内容进行格式化,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。要实现的效果:将话题进行变色并且可以点击提示
2023-05-31

怎么在Android应用中利用Bitmap对图片进行优化

这篇文章给大家介绍怎么在Android应用中利用Bitmap对图片进行优化,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言在Android开发过程中,Bitmap往往会给开发者带来一些困扰,因为对Bitmap操作不慎
2023-05-31

怎么在Android应用中利用Activity对动画进行切换

今天就跟大家聊聊有关怎么在Android应用中利用Activity对动画进行切换,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Android Activity切换动画Android
2023-05-31

怎么在Android利用Matrix对图片进行旋转

本篇文章给大家分享的是有关怎么在Android利用Matrix对图片进行旋转,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。自定义一个View,用来控制这两个图片的旋转。com.
2023-05-31

利用spring boot怎么对第三方jar包进行加载

本篇文章给大家分享的是有关利用spring boot怎么对第三方jar包进行加载,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。具体方法如下: