一、异常机制 (Exception)
异常就是程序无常正常运行,产生了异常状况。出现异常的原因五八门,有可能是用户使用过程中出现了程序能处理范围以外的操作,也可能是程序设计本身就出身错误。
要了解Java对异常的处理机制,就要先说说什么是异常处理机制。
二、异常处理机制
通常就是指,当程序出现异常事件后,程序会提供一个安全退出的通道,从而改变程序执行的顺序,把控制权转移给异常处理器。
而Java从设计之初,就已经考虑到了异常处理的问题,提出的是异常处理的框架方案。这一方案的特点所有的异常都可以用一个类型来表示,不同异常对应着不同的子类,但他们有个共同的父类(Throwable)。Throwable [ 'θrəuə’ei bl ] 直译是可抛出的,在Java中指异常类。
Throwable: 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。异常和错误的区别是:异常能被程序本身可以处理,错误是无法处理。
如上图:
- 1、Error(错误)
Error是程序无法处理的错误,属于系统错误,在Java中属于严重的程序错误,与JVM有直接关联。如VirtualMachineError, OutOfMemoryError(内存溢出)等错误,一但出现,JVM一般会选择终止程序。对于程序员来说,应该极力避免这些错误的出现。因为这些错误对应用程序来说是不可查的,不在程序的控制和处理范围之内,错误不能被程序抛出。
2、Exception(异常)
Exception是程序本身可以处理的异常,非系统性错误,通常是程序本身或者环境配置不当引起的异常。分运行时异常(RuntimeException)和非运行时异常。
- 运行时异常(RuntimeException)
就是Java虚拟机在正常运行时间能被招聘的异常超类及其子类,常见的如:ArithmeticException,ClassCastException,NullPointerException,ArrayIndexOutOfBoundsException,MissingResourceException
- 非行时异常(编译异常)
除去RuntimeException及其子类外的其他Exception类,这些错误编译时就必须处理,否则无法通过。如:IOException,SQLException和用户自定义异常。
- 运行时异常(RuntimeException)
三、可查异常与不检查异常
Java的异常(Throwable)可分为不检查异常(Unchacked Exception)和检查异常(Checked Exception)。这说法通常针对的是Exception及其子类来说的,Error是不检查异常。
- 1、不检查异常(Unchacked Exception)
不受查异常包括Exception中的 Runtime Exception 和 Error 以及他们的子类。
Error
是因为程序处理不了,不在检查范围。而
RuntimeException
,这些异常一般是由程序逻辑错误引起的,程序中可以选择捕获处理,也可以不处理。也就是说java编译器并不强制去检查它,即使没有用try-catch,throw,throws语句,编译并不会报错,修改代码就能消除这些Exception。 - 2、检查异常(Checked Exception)
出现这检查异常,编译器会强制程序员处理和捕获的异常,否则程序的编译就无法通过。除开RuntimeException及其子类,其他Exception子类属于检查异常,常见的有IOException,SQLException及用户自定义异常。
四、Error与Exception区别:
Error通常是灾难性的致命性错误,是程序无法处理的,出现这些错误时,Java虚拟机通常会终止程序
Exception 通常情况下是可以被程序处理的,并且在程序中应该尽可能的去避免这些异常的发生。