`

java ClassNotFoundException和NoClassDefFoundException的差别

    博客分类:
  • java
 
阅读更多
首先从名字上可以看出一类是异常,一类属于错误。异常可以通过异常处理机制使程序继续运行,但出现错误必然找出程序崩溃。

       这个问题是和java 类的加载相关的。类加载的时候先要把编译好的类文件(.class ,jar包等)加载JVM管理的方法区当中,这个过程叫做加载,如果这个过程中没找类文件就会出现ClassNotFoundException。如果加载成功之后,会有一个该类的类对象(class对象)。想方法类,就通过这个类对象,当在内存当中没有找到这个类对象,就会出现NotClassDefFoundError。

1.ClassNotFoundException:

这类异常出现在对类进行加载时,该路径下找不到对应的class文件。有以下情况:

    1.通过Class.forName()加载类。

    2.通过类加载器ClassLoader加载loadClass(),或者findSystemClass()。

如下代码:
[java] view plain copy
在CODE上查看代码片派生到我的代码片

    package abs; 

[java] view plain copy
在CODE上查看代码片派生到我的代码片

    public class Main { 
     
        public static void main(String arg[]) throws Exception { 
            Class.forName("Main"); 
        } 
    } 

就会出现:

Exception in thread "main" java.lang.ClassNotFoundException: Main
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at abs.Main.main(Main.java:18)

这是因为在加载类的时候找不到Mian.class文件(在使用forName()加载类时需要加上包名)。将加载类的代码改成Class.forName("abs.Main")就不会发生异常了。

2.NotClassDefFoundError:

         这类错误发生在运行时,通常是编译通过,但当运行时使用new参数该类对象时,找不到类的定义造成,此异常通常是由于一个类中引用了另外的一个类,而被引用的类没有被classLoader找到。如在编译好Person类后删除person.class时再运行。

[java] view plain copy
在CODE上查看代码片派生到我的代码片

    public class Main { 
     
        public static void main(String arg[]) throws Exception { 
            Person p=new Person("xjp",20); 
            System.out.println(p.getName()); 
        } 
    } 

就会出现

  Exception in thread "main" java.lang.NoClassDefFoundError: abs/Person
分享到:
评论

相关推荐

    java.lang.ClassNotFoundException异常的解决1

    Java中的`ClassNotFoundException`异常通常表示在尝试加载特定类时,JVM无法找到对应的字节码文件。这个异常可能由多种原因引起,但在本场景中,它与Java 9引入的模块系统及其对Java EE API的影响密切相关。 在Java...

    java 找不到指定类时发生的异常(ClassNotFoundException)

    在Java编程语言中,`ClassNotFoundException`是一个非常常见的运行时异常,它属于`java.lang....通过学习这些资源,你可以更好地了解如何避免和处理`ClassNotFoundException`,从而提高你的Java编程技能。

    java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource解决方案

    在Java编程中,`java.lang.ClassNotFoundException` 是一个常见的运行时异常,通常发生在尝试通过类加载器加载指定类时,但找不到对应的字节码文件。在这个特定的问题中,`ClassNotFoundException` 引发的原因是缺少...

    数据库驱动常见错误"java.lang.ClassNotFoundException:解决了jsp连接Error establishing socket.

    "java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver" 解决方案 [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket. 解决了jsp连接 sql server 2000的问题

    java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource

    在Java编程中,`java.lang.ClassNotFoundException`是一个常见的运行时异常,它表示JVM尝试加载一个类时,找不到对应的.class文件。在这个特定的错误中,我们看到的是`org.apache.commons.dbcp.BasicDataSource`,这...

    java.lang.ClassNotFoundException: net.sf.ezmorph.MorpherRegistry

    总的来说,解决 "java.lang.ClassNotFoundException" 的关键在于正确管理和配置项目的依赖,确保所有必要的类都能在运行时被正确加载。通过仔细检查和调整上述步骤,你应该能成功地解决这个问题并继续进行JSON转换...

    Struts的java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource异常的解决方法

    然而,对于初学者来说,遇到错误是常有的事,比如“java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource”。这个异常表明在运行时,系统无法找到指定的类,即Apache Commons DBCP的...

    java.lang.ClassNotFoundException: org.jdom.input.SAXBuilder 处理

    在Java编程中,`ClassNotFoundException` 是一个常见的运行时异常,通常发生在尝试加载类时,Java虚拟机(JVM)无法找到对应的字节码文件。在本例中,问题聚焦于 "org.jdom.input.SAXBuilder" 类,这涉及到Java的...

    Android Caused by: java.lang.ClassNotFoundException解决办法

    "Android Caused by: java.lang.ClassNotFoundException解决办法" 在 Android 开发中,ClassNotFoundException 是一个常见的异常,它通常发生在应用程序启动或运行时。这个异常的出现告诉我们,Java 虚拟机无法找到...

    java连接HighGo DB

    标题《java连接HighGo DB》所要阐述的知识点主要集中在Java程序中如何连接到HighGo数据库。HighGo数据库是由瀚高基础软件股份有限公司开发的一款高性能、稳定可靠的数据库系统。在Java中进行数据库操作,通常需要...

    resolver_java_wsdl.jar

    Caused by: java.lang.ClassNotFoundException: com.sun.org.apache.xml.internal.resolver.CatalogManager at java.net.URLClassLoader.findClass(URLClassLoader.java:434) at ...

    Java使用Jdbc连接Oracle执行简单查询操作示例

    Java使用Jdbc连接Oracle执行简单查询操作示例 Java使用Jdbc连接Oracle执行简单查询操作,是指使用Java语言通过Jdbc(Java ...通过本文,读者可以了解Java中Jdbc连接Oracle数据库的基本步骤和防止SQL注入的方法。

    ClassNotFoundException终极解决办法

    `ClassNotFoundException` 是 Java 开发过程中常见的运行时异常,通常发生在尝试加载某个类时,系统无法在指定的类路径(ClassPath)中找到对应的 `.class` 文件。本文将深入探讨 `ClassNotFoundException` 的原因、...

    Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常

    在Java编程中,`ClassNotFoundException` 是一个常见的运行时异常,表示尝试加载某个类时,在类路径中找不到对应的`.class`文件。在这个特定的场景中,异常堆栈跟踪显示 `Caused by: java.lang....

    javax.xml.bind jdk1.5缺包

    `javax.xml.bind`是Java中的一个标准API,主要用于XML数据绑定,它允许Java对象和XML文档之间进行互操作。`com.sun.xml.bind.v2.ContextFactory`是这个模块的核心类,负责生成和管理Java对象与XML之间的绑定上下文。...

    Eclipse plugin开发中的ClassNotFoundException问题

    `ClassNotFoundException`是Java运行时环境抛出的,当JVM试图根据类名动态加载类,但在当前的类路径(Classpath)中找不到该类时,就会发生这个错误。在Eclipse插件开发中,这可能是由于以下原因造成的: 1. **类...

    Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.Transformer异常

    在Java编程中,`ClassNotFoundException` 是一个常见的运行时异常,通常表示尝试加载某个类时,在类路径中找不到该类的定义。在这个特定的场景中,异常堆栈跟踪显示了 `Caused by: java.lang.ClassNotFoundException...

    linux环境下成功编译的GDAL JAVA库

    它支持多种栅格和矢量数据格式,并提供了C++、Python、Java等多种编程语言的接口。本篇文章将重点讲解如何在CentOS系统上成功编译GDAL的JAVA库,以及如何使用.so格式的库文件进行Java开发。 首先,我们需要确保系统...

Global site tag (gtag.js) - Google Analytics