当前位置:首页 > 开发 > 编程语言 > Java > 正文

关于java.lang.ClassNotFoundException 和 java.lang.NoClassDefFoundError 的区别

发表于: 2015-05-08   作者:程序员是怎么炼成的   来源:转载   浏览:
摘要:    真正完成类的加载工作是通过调用 defineClass来实现的;  而启动类的加载过程是通过调用 loadClass来实现的;  就是类加载器分为加载和定义   protected Class<?> findClass(String name) throws ClassNotFoundExcept

 

 真正完成类的加载工作是通过调用 defineClass来实现的;

 而启动类的加载过程是通过调用 loadClass来实现的;

 就是类加载器分为加载和定义

 

 protected Class<?> findClass(String name) throws ClassNotFoundException { 
        byte[] classData = getClassData(name); 
        if (classData == null) { 
            throw new ClassNotFoundException(); 
        } 
        else { 
            return defineClass(name, classData, 0, classData.length); 
        } 
    } 
private byte[] getClassData(String className) { 
        String path = classNameToPath(className); 
        try { 
            InputStream ins = new FileInputStream(path); 
            ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
            int bufferSize = 4096; 
            byte[] buffer = new byte[bufferSize]; 
            int bytesNumRead = 0; 
            while ((bytesNumRead = ins.read(buffer)) != -1) { 
                baos.write(buffer, 0, bytesNumRead); 
            } 
            return baos.toByteArray(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
        return null; 
    } 

 

finClass方法中,先加载类全称字符串,返回byte数组,如果返回为空,即这个class文件不存在,则抛出classnotfountException;

如果这个文件存在,才开始定义这个类,此时,如果定义这个类失败,抛出NoClassDefFoundError ;

 

 

 

 

 

 

http://www.ibm.com/developerworks/cn/java/j-lo-classloader/

 

关于java.lang.ClassNotFoundException 和 java.lang.NoClassDefFoundError 的区别

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
今天运行UIUC Image Database for Car Detection的evaluator java程序时出现如下错误: 对于一个jav
在通过jdbc连接mysql数据库时, 如果是java项目,只需要引入mysql-connector-java-xxx.jar buildpat
转自chinasoft,没办法收藏,转载好了,感谢作者: http://blog.csdn.net/maoweiwer/article/detail
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener为什么
阅读目录   ClassNotFoundException   NoClassDefFoundError   参考资料   以前一直没有注
大家在用maven结合jetty时,执行jetty:run 会出现如下异常: 该异常的信息为:jetty后面的管理交给了ec
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener为什么
参考 http://blog.csdn.net/huangbiao86/article/details/6428608 新建的maven web工程,在Class.fo
struts2启动出现如下错误: 解决:lib目录中没有导入jar包
 使用velocity报找不到org.apache.commons.digester.RuleSet这个类,导入如下4个包还报这个错ja
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号