A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 请备注 中级黑马   /  2014-4-3 20:42  /  1036 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

对象.getClass()与对象.getClass().getClassLoad() 获取的Class类对象有什么区别吗?

为什么我用这两个反射加载文件的时候一个能加载,而一个不能呢

InputStream is=getClass().getResuletAsStream("文件名")  is=null; //没加载到

InputStream is=getClass().getClassLoad().getResuletAsStream("文件名")  is=null;//就可以

3 个回复

倒序浏览
类的加载要有到加载器ClassLoad,InputStream is=getClass().getResuletAsStream("文件名")  is=null这一句不能加载是因为getClass()得到的是字节码而不是类的加载器,第二句能行是因为你得到了加载字节码的加载器也就是getClass().getClassLoad(),然后让这个加载器去加载资源就可以加载到了
回复 使用道具 举报
看看这个吧:
(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为什么可以加载第二种文件,而不可以加载第一种文件
回复 使用道具 举报
有用的,看代码
  1. //1.getResourceAsStream()你都写错了,还有getClass前应该加一个对象.
  2.                 InputStream is =c.getClass().getResourceAsStream("haha.properties");
  3.                 InputStream is2 =c.getClass().getClassLoader().getResourceAsStream("haha.properties");
复制代码

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马