Exception和Error有什么区别

请对比Exception和Error,另外,运行时异常与一般异常有什么区别?

Exception和Error

Exception和Error都是继承了Throwable类,在Java中只有Throwable类型的实例才可以被throw或者catch,它是异常处理机制的基本组成类型。

Exception和Error体现了Java平台设计者对不同异常情况的分类。Exception是程序正常运行中可以预料的意外情况,可以被捕获进行处理。Error指不大可能出现的情况,不需要捕获。

运行时异常与一般异常的区别

Exception可以分为checked异常(编译 期异常)和unchecked异常(运行时异常),编译期异常在源代码中必须显式地进行捕获处理,运行时异常不用必须捕获不在编译期强制要求,如NullPointerException、ArrayIndexOutOfBoundsException。

1、尽量不要捕获类似Exception这样通用异常,而应该捕获特定异常。

2、不要生吞异常,要处理或者抛出。

3、在产品代码中,不允许在捕获异常之后printStackTrace(),因为在复杂系统中无法判断输出到哪里了,最好使用产品日志。

4、Java异常处理机制有两个相对昂贵的地方:

   (1)try--catch 代码段会产生额外的性能开销,尽量不要一个大的try包裹整段代码

   (2)Java每实例化一个Exception都会对当时的栈进行快照,这是一个比较重的操作

NoClassDefFoundError和ClassNotFoundException区别

ClassNotFoundException产生的原因,Java支持使用Class.forName方法来动态加载类,如果这个类在路径中没有找到就会抛出ClassNotFoundException异常。

NoClassDefFoundError产生的原因,JVM或者ClassLoader尝试加载类时找不到类的定义,原因可能是打包过程中漏掉了部分类或者jar包出现损坏,就会导致NoClassDefFoundError错误。

你可能感兴趣的:(Exception和Error有什么区别)