异常小结
**
* Throwable类是所有错误和异常的父类
* 错误:XxxError
* 异常:Exception
*
* Throwable常用方法:
* public void printStackTrace()。打印异常的详细信息
* public String getMessage()返回此 throwable 的详细消息字符串。
* public String toString()返回此 throwable 的简短描述。
*
*
**
* 异常的分类:
* 运行时异常:代码没有语法格式错误,在运行时期发生异常
* 特点:自己可以不用处理,如果不处理,JVM自动帮助我们处理
* JVM的处理方案:
* 1.调用异常类中的print(),打印异常的详情信息
* 2.强制终止程序
* 编译时异常:代码没有语法格式错误,在编译时期发生异常
* 特点:必须手动进行处理
* 手动处理解决方案:
* 1.异常在方法上的声明:
* 自己不处理,交给调用者方法处理,如果有多层方法的调用,
* 多个方法都处理不了的情况下,最终交给JVM进行处理
* 2.异常的捕获:谁都不求,自行解决
* 今后主要处理异常的方式都是异常的捕获,
* 在基础阶段,基本上都是第一种处理方式
*
**
* 异常处理的有关的关键字:
* throw,throws,try,catch,finally
*
* throw 异常的抛出
* 通知程序出现了异常信息(从无到有)
*
* throw关键字的格式
* throw new XxxException("异常发生的原因");
*
* 异常的声明:
* 修饰符 返回值类型 方法名 () throws 异常类名1,异常类名2,..... {
*
* }
*
**
* 异常的注意事项:继承
* 1.声明的多个异常类之间存在子父类继承关系
* a.在进行异常声明的时候,子类异常和父类类型谁在前谁在后,顺序无所谓
* b.当某个方法存在多个异常时,可以声明这几个异常类的父类,简化代码
* 2.含有异常类的代码出现子父类继承关系
* a.含有异常类的代码出现在父类的方法中
* 如果子类重写父类中含有异常的方法,子类无需理会父类异常信息
* b.含有异常类的代码出现在子类的方法中
* 在子类重写父类的方法中出现了异常信息,手动的解决方案只有唯一的一种:
* 异常的捕获
*
**
* 异常捕获的注意事项:继承
* 1.多个异常类之间存在子父类继承关系
* 解决方案:
* a.针对多个异常分别捕获,分别处理(推荐)
* b.针对多个异常一次捕获,分别处理
* 注意:如果一次捕获,分别处理的时候,
* 需要将子类的catch写到上到或者直接处理一个父类即可
* c.针对多个异常一次捕获,一次处理
* 2.含有异常的代码出现子父类继承关系
* a.含有异常的代码出现在父类的方法中
* 如果子类重写父类中含有异常的方法,子类无需理会父类异常信息
* b.含有异常的代码出现在子类的方法中
* 在子类重写父类的方法中出现了异常信息,手动的解决方案只有唯一的一种:异常的捕获
*
**
* finally关键字:
* 格式1:
* try {
*
* } catch () {
*
* } finally {
* 必须执行的代码
* }
* 格式2:
* try {
*
* } finally {
* 必须执行的代码
* }
*
* 作用: 必须执行的代码
* 应用场景:
* 在finally里面执行关系资源的代码
*
* finally注意事项:
* 在try语句中,catch和finally里面尽量不要写return,
* 因为catch和finally同时拥有return语句,执行的是finally里面的return语句
*
**
* 自定义异常:
* 自定义运行时异常
* 位置:java.lang.RuntimeException
* 1.自定义运行时异常类, 并继承RuntimeException
* 2.生成对应的构造器,至少生成2个
* 一个是无参的构造器
* 一个是带有String类型参数的构造器
* 自定义编译时异常
* 位置:java.lang.Exception(除了RuntimeException)
* 1.自定义编译时异常类,并继承Exception
* 2.生成对应的构造器,至少生成2个
* 一个是无参的构造器
* 一个是带有String类型参数的构造器
*