您的位置:首页 > 其它

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

2017-07-28 22:22 375 查看
相信很多写过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)构造函数的执行(父类的构造函数先执行)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐