关于xxxxx.class.getClassLoader().getResource(fileName),请教大家。

iaiti 2012-10-07 09:22:25
xxxxx.class.getClassLoader().getResource(fileName);
听了大半天,还是搞不懂这里教程里面所说的.class这个东西说是对某一类编译好的对象的描述 ,后面的那几个懂了,就是在xxxx.class这里卡住,哪位高手能详细解释一下为什么要 xxxxx.class 究竟有什么用?这是马士兵坦克大战里面的。

...全文
408 点赞 收藏 4
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2012-10-07
你是否知道ClassLoader是有层级关系的?而且也可以有同级但相互无关的多个?
如果不知道的话,可以去先理解下相关资料。

那么: xxxxx.class 是为了限定用负责装载了该类的ClassLoader,如果你的资源文件跟该类是打包在一个jar中,这样可以保证其装载成功可能性。


如果你直接用 ClassLoader.getSystemResource(fileName),那么只能得到系统级的资源文件。
回复
zhaoming262350 2012-10-07
java文件运行时,先是把一个java的类文件加载到虚拟机上,然后生成类文件的对象,再进行执行,

你也可以查API文档:
public abstract class ClassLoaderextends Object类加载器是负责加载类的对象。ClassLoader 类是一个抽象类。如果给定类的二进制名称,那么类加载器会试图查找或生成构成类定义的数据。一般策略是将名称转换为某个文件名,然后从文件系统读取该名称的“类文件”。

每个 Class 对象都包含一个对定义它的 ClassLoader 的引用。

数组类的 Class 对象不是由类加载器创建的,而是由 Java 运行时根据需要自动创建。数组类的类加载器由 Class.getClassLoader() 返回,该加载器与其元素类型的类加载器是相同的;如果该元素类型是基本类型,则该数组类没有类加载器。

应用程序需要实现 ClassLoader 的子类,以扩展 Java 虚拟机动态加载类的方式。

类加载器通常由安全管理器使用,用于指示安全域。

ClassLoader 类使用委托模型来搜索类和资源。每个 ClassLoader 实例都有一个相关的父类加载器。需要查找类或资源时,ClassLoader 实例会在试图亲自查找类或资源之前,将搜索类或资源的任务委托给其父类加载器。虚拟机的内置类加载器(称为 "bootstrap class loader")本身没有父类加载器,但是可以将它用作 ClassLoader 实例的父类加载器。
回复
Sweeter 2012-10-07
xxx.class就是你项目中的一个类的对象,相当于我现在有一口锅,里面放着很多菜,我要拿到这口锅,我随便拿个菜,也就是所谓的xxx.class,通过这个菜来拿来这口锅。有点傻。。
回复
树成 2012-10-07
xxxxx.class 是获得xxxx这个类对应的Class对象,任何一个类被装载进入虚拟机,都会为这个类生成一个java.lang.Class对象来指代这个类,通过这个对象,你可以访问和控制xxxx这个类的一些特性。

关于这点,你需要去学习一下反射,另外如果你不懂反射,那我也很难相信后面的几句话你也弄懂了,或许那是你一个似是而非的理解,所以,先从基本的开始吧。
回复
发动态
发帖子
Java SE
创建于2007-09-28

6.1w+

社区成员

Java 2 Standard Edition
申请成为版主
社区公告
暂无公告