Java——异常
异常都是由Throwable这个类派生出来的
派生于Throwable的类主要分为两个部分Error和Exception
1.Error : 指的是 Java 虚拟机无法解决的严重问题,比如: JVM 的内部错误、资源耗尽等 ,典型代表: StackOverflowError 和 OutOfMemoryError ,一旦发生回力乏术。
2. Exception :异常产生后程序员可以通过代码进行处理,使程序继续执行。
对于我们程序员可以自己处理的我们称之为异常,而程序员无法处理的称之为错误。
继续往下分

我们这里主要关心的就是异常部分
1.在程序编译的过程中发生的异常我们称之为 编译时异常 也叫做 受查异常 。
2.在程序运行的过程中发生的异常我们称之为 运行异常 也叫做 非受查异常 。
异常的处理:
1 . LBYL : Look Before You Leap.在操作之前就做充分的检查,事前防御型

2. EAFP : It's Easier to Ask Forgiveness than Permission.事后认错型
基本语法格式:

异常处理主要的 5 个关键字: throw 、 try 、 catch 、 final 、 throws.
异常的抛出:
throw new XXXException("异常产生的原因")


1. throw 必须写在方法体内部
2. 抛出的对象必须是 Exception 或者 Exception 的子类对象
3. 如果抛出的是 RunTimeException 或者 RunTimeException 的子类(非受查异常),则可以不用处理,直接交给 JVM 来处理
4. 如果抛出的是编译时异常(受查异常),用户必须处理,否则无法通过编译
5. 异常一旦抛出,其后的代码就不会执行
注意:
throw可以抛出多个异常,用逗号隔开,如果抛出的多个异常具有父子类的关系,直接抛出父类异常即可。
当我们调用的过程中有抛出的异常时必须对异常进行处理,比如用catch捕获,或者在类名的最后面继续用throw抛出,由上一级的类进行处理。
自定义异常:
自定义异常我们通常要让这个类继承与我们的Exception或者是RuntimeException,但是Exception默认是受查异常,我们必须对它进行处理,但RuntimeException默认是非受查异常,不需要我们对他进行处理。

