iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >JAVA中ClassLoader.getResourceAsStream()与Class.getResourceAsStream()的区别有哪些
  • 458
分享到

JAVA中ClassLoader.getResourceAsStream()与Class.getResourceAsStream()的区别有哪些

2023-06-20 18:06:45 458人浏览 安东尼
摘要

这篇文章给大家分享的是有关JAVA中ClassLoader.getResourceAsStream()与Class.getResourceAsStream()的区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看

这篇文章给大家分享的是有关JAVA中ClassLoader.getResourceAsStream()与Class.getResourceAsStream()的区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

Class.getResourceAsStream() 会指定要加载的资源路径与当前类所在包的路径一致。

例如你写了一个MyTest类在包com.test.mycode 下,那么MyTest.class.getResourceAsStream("name") 会在com.test.mycode包下查找相应的资源。

如果这个name是以 '/' 开头的,那么就会从classpath的根路径下开始查找。

ClassLoader.getResourceAsStream() 无论要查找的资源前面是否带'/' 都会从classpath的根路径下查找。

所以: MyTest.getClassLoader().getResourceAsStream("name") 和

MyTest.getClassLoader().getResourceAsStream("name") 的效果是一样的。

顺便提下JAVA中类的加载器:

一共有三种加载器

bootstrap classloader :负责加载JAVA核心类( jre 下lib和class目录中的内容)
extension classloader :负责加载JAVA扩展类(jre 下lib/ext 目录中的内容)
system classloader :负责加载应用指定的类 (环境变量classpath中配置的内容)

一个类的加载顺序也是按上面的排列来的,这样就能保证系统的类能先加载。

与此同时用户也可以自己定义ClassLoader,用来加载特殊的资源。

这里就涉及到 Class.getClassLoader() 和 Thread.currentThread.getContextClassLoader()的区别。

举一个简单的例子:

假如某天JAVA给我们提供了一个叫 StartCamera 的类用来启动电脑的标准摄像头,并将这个类打包在一个jar中。

正常情况下,我们要启动摄像头时只需将这个jar配置到classpath中。系统启动时system classloader会将这个类加载到应用中。

但因为摄像头的生产厂家不一样,针对新的设备会有多个不同的StartCamera实现,在应用中我们不知道实际的用户会用到哪种。于是我们就自定义了一个ClassLoader,用来针对具体的设备类型加载相应的StartCamera类。

这样一来就出现:优先加载我们定义的类,加载不到的情况下再加载系统的。 这样的需求,是系统默认的父委托加载机制无法满足的。

Thread.currentThread.getContextClassLoader() 就是这样产生的。 我们使用Thread.currentThread.setContextClassLoader() 可以为当前线程指定相应的ClassLoader,然后用get的方式来获取。

那么上面的加载代码就可能是这样子的:

publicvoiduseCamera(){StartCameras=this.findClassLoader().loadClass("StartCamera");s.start();}privateClassLoaderfindClassLoader(){ClassLoaderloader=Thread.currentThread().getContextClassLoader();if(loader==null){loader=ClassLoader.getSystemClassLoader();}returnloader;}

感谢各位的阅读!关于“JAVA中ClassLoader.getResourceAsStream()与Class.getResourceAsStream()的区别有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: JAVA中ClassLoader.getResourceAsStream()与Class.getResourceAsStream()的区别有哪些

本文链接: https://www.lsjlt.com/news/298993.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • JAVA中ClassLoader.getResourceAsStream()与Class.getResourceAsStream()的区别有哪些
    这篇文章给大家分享的是有关JAVA中ClassLoader.getResourceAsStream()与Class.getResourceAsStream()的区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看...
    99+
    2023-06-20
  • JAVA 笔记 ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
    Class.getResourceAsStream() 会指定要加载的资源路径与当前类所在包的路径一致。 例如你写了一个MyTest类在包com.test.mycode 下,那...
    99+
    2022-11-12
  • python与java的区别有哪些
    python与java的区别有:1、Python主要应用于游戏开发、搜索引擎、图形图像处理、脚本开发等领域,而Java则应用于服务器开发,web开发和安卓开发等领域;2、Python比Java简单,易学并且开发效率高;3、Java运行效率高...
    99+
    2022-10-19
  • java与javascript有哪些区别
    这篇文章主要介绍“java与javascript有哪些区别”,在日常操作中,相信很多人在java与javascript有哪些区别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2022-10-19
  • java中javaBean与Bean的区别有哪些
    本篇文章为大家展示了java中javaBean与Bean的区别有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。JavaBean 是Java中的一种特殊的类,可以将多个对象封装到一个对象(bean...
    99+
    2023-05-31
    javabean bean java
  • Java中Collections.EMPTY_LIST与Collections.emptyList()的区别有哪些
    这篇文章将为大家详细讲解有关Java中Collections.EMPTY_LIST与Collections.emptyList()的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Collecti...
    99+
    2023-06-25
  • JAVA中JSP与Servlet的区别有哪些
    这篇文章主要介绍了JAVA中JSP与Servlet的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。JSP和SERVLET到底在应用上有什么区别,很多人搞不清楚。我来...
    99+
    2023-06-03
  • Java中Error与Exception的区别有哪些
    这篇文章主要介绍了Java中Error与Exception的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Error类和Exception类都继承自Throwabl...
    99+
    2023-06-17
  • java null与空的区别有哪些
    一般情况下, java中的null就是指的空。但是稍微注意的是,空字符串"" 和null是有区别的。"" 代表有字符串,但是字符串内容为空,长度为0;null表示对象为空。如果用为null的对象去调用方法,就会出现空指针异常。所以,在字符串...
    99+
    2019-10-24
    java教程 java null 区别
  • super与this在Java中的区别有哪些
    这篇文章将为大家详细讲解有关 super与this在Java中的区别有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。super和this的异同   &nbs...
    99+
    2023-05-31
    java this super
  • PropertyChangeSupport与PropertyChangeListener在java中的区别有哪些
    这篇文章将为大家详细讲解有关PropertyChangeSupport与PropertyChangeListener在java中的区别有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。ja...
    99+
    2023-05-31
    java propertychangesupport propertychangelistener
  • Java中Object与泛型的区别有哪些
    Java中Object与泛型的区别有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Object和泛型的两点区别是:Object范围非常广,而T从一开始就会限定这个类型(包括...
    99+
    2023-05-31
    object java 泛型
  • java bean与ejb有哪些区别
    这篇文章主要为大家展示了“java bean与ejb有哪些区别 ”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java bean与ejb有哪些区别 ”这篇文章吧。您现在可能已在使用 JavaBe...
    99+
    2023-06-03
  • 在Java 中FileReader与FileWriter有哪些区别
    在Java 中FileReader与FileWriter有哪些区别?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。FileReader和FileWriter源码分析1. File...
    99+
    2023-05-31
    java filereader filewriter
  • java与c语言的区别有哪些?
    java与c语言的区别有哪些?1、Java与C内存分配不同:Java中内存分配五个区,分别为栈区(存储的是局部变量,使用完毕,立即回收),堆区(存储的是new出来的东西,实体,对象,每一个对象都有地址值,每个对象的数据都有默认值,使用完毕后...
    99+
    2020-10-28
    java教程 java c语言
  • getPath()、getAbsolutePath()与getCanonicalPath()在Java中的区别有哪些
    getPath()、getAbsolutePath()与getCanonicalPath()在Java中的区别有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获...
    99+
    2023-05-31
    java getpath() getabsolutepath()
  • java中编译与运行的区别有哪些
    这篇文章给大家介绍java中编译与运行的区别有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java编译时与运行时很重要的概念,但是一直没有明晰,这次专门博客写明白概念.基础概念编译时 编译时顾名思义就是正在编译的...
    99+
    2023-05-31
    java 编译 运行
  • PHP7中的?与??有哪些区别
    这篇文章将为大家详细讲解有关PHP7中的?与??有哪些区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php是什么语言php,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext P...
    99+
    2023-06-14
  • sql中#与$有哪些区别
    这篇文章给大家分享的是有关sql中#与$有哪些区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在这里用到了#{},使用#时:1、用来传入参数,sq...
    99+
    2022-10-18
  • java继承与聚合的区别有哪些
    Java中的继承和聚合都是实现代码重用的方式,但它们有一些区别。继承:1. 继承是通过创建一个类来继承另一个类的属性和方法。2. 子...
    99+
    2023-09-08
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作