关闭

this.class.getClassLoader().getResourceAsStream(path)

标签: javaclassloaderpathwebxml
158人阅读 评论(0) 收藏 举报
分类:

相信很多写过web项目的会对this.this.class.getClassLoader().getResourceAsStream(path)这段代码有疑惑。我们用这段代码可以获取在classpath路径下的资源文件的输入流。为什么是classpath而不是src,因为当web项目运行时,IDE编译器会把src下的一些资源文件移至WEB-INF/classes,classPath目录其实就是这个classes目录。这个目录下放的一般是web项目运行时的class文件、资源文件(xml,properties...);

然后我们可以仔细分析一下这段代码,this.class是获取当前类的class对象,getClassLoader()是获取当前的类加载器

,什么是类加载器?简单点说,就是用来加载java类的,类加载器就是负责把class文件加载进内存中,并创建一个java.lang.Class类的一个实例,也就是class对象,并且每个类的类加载器都不相同.getResourceAsStream(path)是用来获取资源的,因为这是ClassLoader(类加载器)了获取资源,而类加载器默认是从classPath下获取资源的,因为这下面有class文件.所以这段代码总的意思是通过类加载器在classPath目录下获取资源.并且是以流的形式.同时path不能以’/'开头,否则会报错.

顺便聊一下java类加载的过程吧

3个步骤:1.加载,加载类的二进制文件。

2.链接:

  (1)验证,验证字节码的结构是否正确

  (2)准备,给静态成员分配空间并赋予默认值(注意这里:静态变量的第一次赋值是在类加载的时候就进行了,与后面初始化的时候的自定义赋值不是同一过程,也就是静态成员在初始化的时候可能已被赋值二次了)

  (3)解析,将符号引用变为直接引用

3初始化,为静态成员赋予自己给定的初值

类的实例化的顺序:

(1)静态成员、方法与静态代码块的初始化与执行

(2)普通成员、方法与普通代码块的初始化与执行

(3)构造函数的执行(父类的构造函数先执行


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Java绝对/相对路径获取与getResourceAsStream()方法

Java路径   Java中使用的路径,分为两种:绝对路径和相对路径。具体而言,又分为四种:    一、URI形式的绝对资源路径   如:file:/D:/java/eclipse3...
  • zmx729618
  • zmx729618
  • 2016-04-13 16:38
  • 20786

java加载外部文件数据到代码中:外部数据文件放到jar包中,调用方法getResourceAsStream

任务要将数据文件geo.txt加载进行。因为是别人写的总体项目,不能乱动位置。只能将geo.txt打包到jar中某目录。比如,放到.class文件下怎么加载:http://riddickbryant....
  • longshenlmj
  • longshenlmj
  • 2014-12-10 17:50
  • 2356

基于Akka-Streams的HTTP代理的实现

Akka-Streams是一个让人激动的Reactive Streams的框架,Akka-Http也是构建在其之上,除了内置背压模式的支持,使用其DSL构建一个Graph也是一个让人惊艳的过程。对于A...
  • bluishglc
  • bluishglc
  • 2017-02-18 12:16
  • 3276

this.class.getClassLoader().getResourceAsStream

this.class.getClassLoader().getResourceAsStream 博客分类:  java知识点   this.getClass().getCl...
  • cherry_island
  • cherry_island
  • 2016-12-02 10:13
  • 115

InputStream in = JdbcUtil.class.getClassLoader().getResourceAsStream("dbinfo.properties");

我们在运行java程序的时候,编译器先运行java的虚拟机(JVM),里面有个类加载器叫Class Loader(类加载器),会把java的 class加载进虚拟机。
  • linbichengdeps
  • linbichengdeps
  • 2017-05-10 20:00
  • 133

关于class.getResourceAsStream() 与class.getClassLoader().getResourceAsStream()区别

项目工程下读取文件的几种方式:1.图片在src目录下,即资源文件;此时测试类与图片位置无关。InputStream inputStream = getClass().getClassLoader()....
  • J080624
  • J080624
  • 2016-11-15 14:49
  • 214

正确使用Class.getResourceAsStream("")与Class.getClassLoader().getResourceAsStream("")

方法getResourceAsStream("")与getResource("")均常被用于获取编译路径下指定的配置文件,用法相似,下面以getResource("")为例展示其正确用法: /...
  • Netbug_NB
  • Netbug_NB
  • 2015-05-28 13:12
  • 2596

Class.getResourceAsStream(String path)

Java中getResourceAsStream的用法 首先,Java中的getResourceAsStream有以下几种: 1. Class.getResourceAsStream(String ...
  • qq_23013625
  • qq_23013625
  • 2016-08-03 14:16
  • 122

this.getClass().getClassLoader().getResource("");

调用对象的getClass()方法是获得对象当前的类类型,这部分数据存在方法区中。         类类型上调用getClassLoader()方法是得到当前类型的类加载器。         我们知道...
  • u013923339
  • u013923339
  • 2015-07-25 23:45
  • 1279

Thread.currentThread().getContextClassLoader()与Test.class.getClassLoader()区别

 忘记以前有没有问过这个问题,总之我现在有看到几个地方有这个: Thread.currentThread().getContextClassLoader() 我总是想不出在什么情况下会用这种...
  • chx10051413
  • chx10051413
  • 2014-11-11 11:05
  • 1489
    个人资料
    • 访问:366次
    • 积分:24
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档