Java中的异常,并不是现实世界中所说的那个错误或者异常,而是区别于正常流程的一种分支。也成为例外。当一个异常发生时,一个所谓的异常处理器会捕捉这个被抛出的异常,然后做这个异常进行处理。
Java中的异常,和我们现实中的异常并不是一个意思,他是程序运行的另外一个分支,也称例外。
我们看下异常的结构
try{ // 正常的流程,可能会抛出异常 // 正常的业务代码 } catch(异常类型名称) { // 另外一个分支,异常处理逻辑 } finally { // 一定会走的区域 (可选) }
上面的结构是我们编程最常见的结构,当然finally语句块可以省略,根据业务适当的利用finally可以起到很好的作用。
3.异常的种类
分为两种 1.Checked Exception, 2.Runtime Exception
对于1来说,错误是可预期发生的异常,也就是在程序编译期间就可以检测出来的这类异常,当然会让你修正这类异常。
对于2来说,异常时发生在程序执行期间,并不一定预期它可发生异常,编译期间不要求处理。如果这类异常没有做处理的话,它会一直往外抛出,直至抛给JVM进行处理。我们经常见到的异常信息的LOG,最上面就是显示的就是JVM处理的结果。
4.对策
对于上述两类异常,我们来说一说该怎么对待。
对于第一种来说,我们可以预见所发生的异常,当然Eclipse软件也会提示异常信息,我们去建立另外一支分支,当然Catch语句块。
对于第二种异常来说我们还得涉及下面的两个名词throw,throws.
5.throw,throws 的利用
throw来说,想要自己抛出异常,并生成指定的异常类型(自定义异常)。当你不能确定要完全处理这个异常的话,或者让调用者自己处理参与处理的话,在Catch中用throw 将这个异常重新抛出,这是一个明智的选择。
throws:方法异常列表声明,该方法有可能发生异常,让调用者自行处理。
重要:在选择异常处理方式的时候,如果在当前节点上你知道该怎么处理,用try-Catch,如果不知道怎么处理,用throws交给调用者来处理。如果你只能够完成部分处理,请先try-catch,throw重新抛出异常,配合throws让上层调用者继续处理。
6.再说说自定义异常,通常来说,是继承Exception类型,在运行期间的话,要继承RuntimeException
注意也要把构造器重载好。
此文也可作为面试参考的内容,如果大家有什么疑问,可以发表你们的看法,谢谢。