`
hbxflihua
  • 浏览: 660376 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Exception与Error的区别?

    博客分类:
  • java
阅读更多

Java语言在设计之初就提供了相对完善的异常处理机制,这种机制大大降低了编写和维护可靠程序的门槛,这也是Java得以大行其道的原因。

 

Exception与Error

Exception与Error都继承自Throwable类,在Java中只有Throwable类型的实例才可以被抛出(throw)或者捕获(catch)。Exception和Error体现了Java平台设计人员对不同异常情况的分类。

 

Error

Error是指正常情况下不大可能出现的情况,绝大部分的Error都会导致程序处于非正常的、不可恢复的状态。既然是非正常情况,所以不便于也不需要捕获,常见的如OutOfMemoryError等。

 

Exception

Exception是程序正常运行中可以预料的意外情况,可以被捕获并进行相应的处理。

Exception又分为检查(checked)异常和非检查(unchecked)异常。检查异常在源代码中必须显示的捕获,这是编译器检查的一部分。不检查异常就是所谓的运行时异常,类似NullPointerException、ArrayIndexOutOfBondsException之类,通常是可以编码避免的逻辑错误,可以根据需要来自行判断是否需要捕获,不会在编译期进行检查。

 

异常处理

在日常编程中如何处理好异常?可以从以下两个方面着手。

1、理解Throwable、Exception、Error的设计和分类。比如,掌握那些应用最广泛的子类,以及如何自定义异常等。

异常分类

问:NoClassDefFopndError和ClassNotFoundException有什么区别?

 

2、理解Java语言中操作Throwable的元素和实践。掌握基本语法是必须的,如Try-catch-finally块,throw、throws关键字等,异常处理代码比较繁琐,比如我们需要写很多千篇一律的捕获代码,或者在finally做一些资源回收的工作。随着Java语言的发展,引入了一些更加便利的特性,比如 try-with-resources和multiple catch等。

 

最佳实践

1、尽量不要捕获类似Exception这样通用的异常,而是应该捕获特定异常。除非深思熟虑,否则不要直接捕获Throwable或者Error。

 

2、不要生吞(swallow)异常。生吞异常很可能会导致非常难以诊断的诡异情况,不利于异常排查和问题跟踪。

 

 

  • 描述: 异常分类
  • 大小: 19.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics