请对比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错误。
网友评论