上图能够简单展现一下异常类实现结构图,固然上图不是全部的异常,用户本身也能够自定义异常实现。上图已经足够帮咱们解释和理解异常实现了:
1.全部的异常都是从Throwable继承而来的,是全部异常的共同祖先。
2.Throwable有两个子类,Error和Exception。其中Error是错误,对于全部的编译时期的错误以及系统错误都是经过Error抛出的。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,如Java虚拟机运行错误(Virtual MachineError)、类定义错误(NoClassDefFoundError)等。这些错误是不可查的,由于它们在应用程序的控制和处理能力之 外,并且绝大多数是程序运行时不容许出现的情况。对于设计合理的应用程序来讲,即便确实发生了错误,本质上也不该该试图去处理它所引发的异常情况。在 Java中,错误经过Error的子类描述。
3. Exception,是另一个很是重要的异常子类。它规定的异常是程序自己能够处理的异常。异常和错误的区别是,异常是能够被处理的,而错误是无法处理的。
4.Checked Exception 可检查的异常,这是编码时很是经常使用的,全部checked exception都是须要在代码中处理的。它们的发生是能够预测的,正常的一种状况,能够合理的处理。好比IOException,或者一些自定义的异常。除了RuntimeException及其子类之外,都是checked exception。
5.Unchecked ExceptionRuntimeException及其子类都是unchecked exception。好比NPE空指针异常,除数为0的算数异常ArithmeticException等等,这种异常是运行时发生,没法预先捕捉处理的。Error也是unchecked exception,也是没法预先处理的。java
代码中的异常处理实际上是对可检查异常的处理。数据库
e.g. try { // 程序代码 }catch(ExceptionName e1) { //Catch 块 }
Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。 若是发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是同样。数组
下面方法的声明抛出一个 RemoteException 异常:安全
import java.io.*; public class className { public void deposit(double amount) throws RemoteException { // Method implementation throw new RemoteException(); } //Remainder of class definition }
try{ // 程序代码 }catch(异常类型1 异常的变量名1){ // 程序代码 }catch(异常类型2 异常的变量名2){ // 程序代码 }finally{ // 程序代码 }
https://baijiahao.baidu.com/s?id=1621169426787906677&wfr=spider&for=pc https://blog.csdn.net/michaelgo/article/details/82790253