java.lang.NoClassDefFoundError

来源:互联网 发布:医药行业ims数据分析 编辑:程序博客网 时间:2024/06/11 01:12

NoClassDefFoundError错误的发生,是因为Java虚拟机在编译时能找到合适的类,而在运行时不能找到合适的类导致的错误。例如在运行时我们想调用某个类的方法或者访问这个类的静态成员的时候,发现这个类不可用,此时Java虚拟机就会抛出NoClassDefFoundError错误。与ClassNotFoundException的不同在于,这个错误发生只在运行时需要加载对应的类不成功,而不是编译时发生。很多Java开发者很容易在这里把这两个错误搞混。

简单总结就是,NoClassDefFoundError发生在编译时对应的类可用,而运行时在Java的classpath路径中,对应的类不可用导致的错误。 


出错原因是因为在编译的时候出现了ActiveCountController$1.class文件而这个文件并没有被上传到线上的项目。

$后面跟数字的类就是匿名类编译出来的结果.是因为ActiveCountController.java在179行的时候使用了匿名内部类,如下图


$后面跟数字的类就是匿名类编译出来的结果.TestFrame$MyJob.class则是内部类MyJob编译后得到的.

加上$符号的类,说明是$符号前面那个类的一个内部类,java中按照这种机制,编译内部类,也方便用户知道自己的内部类是归属于哪个外部类。
不带$符号的Class的文件只与该Java文件里编写的public class (即唯一的一个公有类)一致。
如果该Java文件里还有别的【内部类】、【非公有类】等,就会出现带$号的class文件,并且,其文件的数量和内部类、非公有类的数量一致。

注意:文件一旦被编译  在tomcat容器里运行代码时 是不会再次 编译内部类、匿名类文件 所以部署时要同时部署(内部类文件和匿名类文件)才能正常运行;

原创粉丝点击