Class.getResource与ClassLoader.getResource()区别

Class.getResource是根据类的相对路径来访问资源的。如果该类没有package,则类的根路径是就是当前路径;如果该类有package,则类的根路径是定级包所在的路径。

下面显示了一个类的包层次结构:

+bin--

    +myjava--

           Drawing.class

    +images--

             title.gif

假设我们要获取title.gif对象,可以通过以下方式得到:

 

1 Image img = (new ImageIcon(Drawing.class.getResource("/images/title.gif"))).getImage();

2 Image img = (new ImageIcon(Drawing.class.getResource("../images/title.gif"))).getImage();

从上述获取title.gif方式可知,在用Class.getResource获取资源文件时:

1、如果你指定的路径以“/”开头,那么就是从ClassPath的起点开始寻找这个路径。

2、如果直接以某个package名或者表示路径的符号(例如:..代表上级目录)开头,那么就是从当前package名的目录为起点开始寻找。

所以大家如果用过hibernate就知道,有些表示类到数据库表的映射关系的xml文件就和这个类的class文件放在一起,这样它就直接使用这个类.class.getResource方法来得到这个xml文件。

 

而在使用ClassLoader的getResource方法的时候,永远是以Classpath为直接起点开始寻找资源的,不用担心从什么包开始寻找的问题。

 

 

 

你可能感兴趣的:(ClassLoader)