ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
来源:互联网 发布:java怎样显示输入框 编辑:程序博客网 时间:2024/06/04 19:59
Class.getResourceAsStream() 会指定要加载的资源路径与当前类所在包的路径一致。
例如你写了一个MyTest类在包com.test.mycode 下,那么MyTest.class.getResourceAsStream("name")
会在com.test.mycode包下查找相应的资源。
如果这个name是以 '/' 开头的,那么就会从classpath的根路径下开始查找。
所以: MyTest.getClassLoader().getResourceAsStream("name") 和
顺便提下JAVA中类的加载器:
一共有三种加载器
一个类的加载顺序也是按上面的排列来的,这样就能保证系统的类能先加载。
与此同时用户也可以自己定义ClassLoader,用来加载特殊的资源。
这里就涉及到 Class.getClassLoader() 和 Thread.currentThread.getContextClassLoader()的区别。
举一个简单的例子:
假如某天JAVA给我们提供了一个叫 StartCamera 的类用来启动电脑的标准摄像头,并将这个类打包在一个jar中。
正常情况下,我们要启动摄像头时只需将这个jar配置到classpath中。系统启动时system classloader会将这个类加载到应用中。
但因为摄像头的生产厂家不一样,针对新的设备会有多个不同的StartCamera实现,在应用中我们不知道实际的用户会用到哪种。于是我们就自定义了一个ClassLoader,用来针对具体的设备类型加载相应的StartCamera类。
这样一来就出现:优先加载我们定义的类,加载不到的情况下再加载系统的。 这样的需求,是系统默认的父委托加载机制无法满足的。
Thread.currentThread.getContextClassLoader() 就是这样产生的。 我们使用Thread.currentThread.setContextClassLoader() 可以为当前线程指定相应的ClassLoader,然后用get的方式来获取。
那么上面的加载代码就可能是这样子的:
StartCamera s = this.findClassLoader().loadClass("StartCamera");
s.start();
}
private ClassLoader findClassLoader(){
ClassLoader loader = Thread.currentThread().getContextClassLoader();
if(loader==null){
loader = ClassLoader.getSystemClassLoader();
}
return loader;
}
- Class.getResourceAsStream()与ClassLoader.getResourceAsStream()的区别
- ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
- ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
- ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
- ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
- Class.getResourceAsStream()与ClassLoader.getResourceAsStream()的区别
- JAVA 笔记 ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
- JAVA 笔记 ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
- 小知识Class.getResourceAsStream()与ClassLoader.getResourceAsStream()的区别
- ClassLoader().getResourceAsStream()和Class.getResourceAsStream()的区别
- Class.getResourceAsStream和ClassLoader.getResourceAsStream的区别
- Class.getResourceAsStream() & ClassLoader的getResourceAsStream()
- Class.getResourceAsStream() & ClassLoader的getResourceAsStream()
- Class.getResourceAsStream() & ClassLoader的getResourceAsStream()
- Class.getResourceAsStream 和 ClassLoader.getResourceAsStream区别
- className.class.getResourceAsStream()与ClassLoader.getSystemResourceAsStream() 的区别
- className.class.getResourceAsStream()与ClassLoader.getSystemResourceAsStream() 的区别
- className.class.getResourceAsStream()与ClassLoader.getSystemResourceAsStream() 的区别
- HttpClient 4.3学习教程资源
- 进程和线程的联系和区别
- Merge Sorted Array,Merge Two Sorted Lists,Remove ... Sorted List,Count and Say,Climbing Stairs
- zoj3822(概率DP)
- Sizeof与Strlen的区别与联系
- ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
- [玩树莓派系列]树莓派实现家庭监控
- 设计模式(三)The Decorator Pattern 装饰器模式
- 网站搭建从零开始(五) WordPress的安装
- 【OJ】贪心——区间问题 hzu.acmclub.com 1126看电视
- Atititjs javascript异常处理机制与java异常的转换.js exception process
- mysql的一些学习笔记。
- cocos2d x 3.3.0中CCScale9Sprite类
- Leetcode - Best Time to Buy and Sell Stock