黑马程序员技术交流社区

标题: 字解码问题 [打印本页]

作者: 请备注    时间: 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. //1.getResourceAsStream()你都写错了,还有getClass前应该加一个对象.
  2.                 InputStream is =c.getClass().getResourceAsStream("haha.properties");
  3.                 InputStream is2 =c.getClass().getClassLoader().getResourceAsStream("haha.properties");
复制代码






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2