黑马程序员技术交流社区
标题:
字解码问题
[打印本页]
作者:
请备注
时间:
2014-4-3 20:42
标题:
字解码问题
对象.getClass()与对象.getClass().getClassLoad() 获取的Class类对象有什么区别吗?
为什么我用这两个反射加载文件的时候一个能加载,而一个不能呢
InputStream is=getClass().getResuletAsStream("文件名") is=null; //没加载到
InputStream is=getClass().getClassLoad().getResuletAsStream("文件名") is=null;//就可以
作者:
郭黎明
时间:
2014-4-3 20:49
类的加载要有到加载器ClassLoad,InputStream is=getClass().getResuletAsStream("文件名") is=null这一句不能加载是因为getClass()得到的是字节码而不是类的加载器,第二句能行是因为你得到了加载字节码的加载器也就是getClass().getClassLoad(),然后让这个加载器去加载资源就可以加载到了
作者:
血剑无痕
时间:
2014-4-3 20:56
看看这个吧:
(1).InputStream is=getClass().getResourceAsStream("文件名");
(2).InputStream iis=getClass().getClassLoader().getResourceAsStream("文件名");
看看这层源码:
public InputStream getResourceAsStream(String name) {
name = resolveName(name);
ClassLoader cl = getClassLoader0();
if (cl==null) {
// A system class.
return ClassLoader.getSystemResourceAsStream(name);
}
return cl.getResourceAsStream(name);
}
native ClassLoader getClassLoader0();
//这句代码适合底层操作系统c语言编写的程序打交道就会读写自定义的文件等操作
public final native Class<?> getClass();这根本就没法加载
这层代码是对于有没有获取classLoade进行解释操作的:
public ClassLoader getClassLoader() {
ClassLoader cl = getClassLoader0();
if (cl == null)
return null;
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
ClassLoader ccl = ClassLoader.getCallerClassLoader();
if (ccl != null && ccl != cl && !cl.isAncestor(ccl)) {
sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION);
}
}
return cl;
}
通过以上代码就可以清除的明白jvm为什么可以加载第二种文件,而不可以加载第一种文件
作者:
╰青青子佩ˊゝ
时间:
2014-4-3 21:04
有用的,看代码
//1.getResourceAsStream()你都写错了,还有getClass前应该加一个对象.
InputStream is =c.getClass().getResourceAsStream("haha.properties");
InputStream is2 =c.getClass().getClassLoader().getResourceAsStream("haha.properties");
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2