首先,调用对象的getClass()方法是获得对象当前的类类型,这部分数据存在方法区中,而后在类类型上调用getClassLoader()方法是得到当前类型的类加载器,我们知道在Java中所有的类都是通过加载器加载到虚拟机中的,而且类加载器之间存在父子关系,就是子知道父,父不知道子,这样不同的子加载的类型之间是无法访问的(虽然它们都被放在方法区中),所以在这里通过当前类的加载器来加载资源也就是保证是和类类型同一个加载器加载的。![微笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)
这个类和这个方法没有直接的关系,只是当后面的fileName是一个相对路径的时候,就会在当前这个ULTraCollectUtil这个类的当前位置开始查找资源文件,如果是个绝对路径的话,那前面的类是任意的Java类都可以了,因为.class.getClassLoader()是为了获得一个类加载器,用来加载classpath下的.class文件而已。
getResource返回的是一个URL对象,不要简单的认为是这个资源的绝对地址,这是一个Java中封装的对象,你可以去看看相关的API,里面有很多方法可以获取你当前资源文件的信息的。
另外,提醒一下,很少是单独用上面这个URL对象的,一般是通过这个URL对象来构造Java中的FIle对象以及Icon对象等等,
File file3 = new File(Test.class.getClassLoader().getResource("javaapplication/file3.txt").getFile());
String icon = "../image/1.gif ";
button.setIcon(new ImageIcon(getClass() .getResource(icon)));