首先明确:两者都是继承自Throwable类,在java中,只有Throwable类型的实例才可以被抛出或者捕获
两者的区别
Error
1. Error是系统中的错误,程序员是不能改变和处理的;程序编译时出现的错误,只能通过修改程序才能修正
2. Error一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足
3. 对于error这类错误导致的应用程序终端,仅靠程序自身无法恢复和预防,遇到这样的错误,建议让程序终止
Exception
1. Exception表示程序可以处理的异常,可以捕获且可能恢复
2. 遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不是随意种植异常
对于Exception,它又可以分为以下两类异常:CheckedException(检查异常)和RuntimeException(非检查异常)
编写程序如何处理好异常
- Throwable、Exception、Error的设计和分类,比如。掌握那些应用最为广泛的子类,以及如何自定义异常
- 理解java语言中操作Throwable的元素和实践
延申
NoClassDefFoundError和ClassNotFoundException有什么区别
首先,我们应该清楚:一个是error一个是exception,NoClassDefFoundError是jvm运行时通过classpath加载类是,早不到对应的类而抛出的错误。ClassNotFoundException是在编译过程中如果出现此异常,在编译过程中必须将ClassNotFoundException异常抛出
具体来说两者的发生场景有如下
NoClassDefFoundError
1. 类依赖class或者jar不存在
2. 类文件存在,但是存在不同的域中
3. 大小写问题,javac编译的时候是五十大小的,很有可能编译出来的class文件与想要的不一样
...
ClassNotFoundException
1. 调用class的forName方法时,找不到指定的类
2. ClassLoader中的findSystemClass()方法时,找不到指定的类
...