26.异常

异常产生原理:

1.JVM会根据异常产生的原因创建一个异常对象,这个异常对象包含了异常产生的(内容,原因,位置)

2.没有异常处理逻辑的情况下(try-catch),JVM就会把异常对象打印在控制台,会终止当前正在执行的java程序(中断处理)

throw:

  1. throw关键字必须写在方法的内部
  2. throw关键字后边new的对象必须是Exception或者是Exception的子类对象
  3. throw关键字抛出指定的异常对象,我们就必须处理这个异常对象
    1. 如果是RuntimeException或者是RuntimeException的子类对象,可以不处理,默认交给JVM处理
    2. throw关键字后边创建的是编译异常(写代码的时候报错),就必须处理这个异常,要么throws,要么try…catch
  4. 方法内部如果抛出了多个异常对象,那么throws后边必须也声明多个异常
    1. 如果抛出的多个异常对象有子父类关系,那么直接声明父类异常即可
  5. 调用了一个声明抛出异常的方法,我们就必须的处理声明的异常
    1. 要么继续使用throws声明抛出,交给方法的调用者处理,最终交给JVM
    2. 要么try…catch自己处理异常

try…catch:

  1. try中可能会抛出多个异常对象,那么就可以使用多个catch来处理这些异常对象
  2. 如果try中产生了异常,那么就会执行catch中的异常处理逻辑,执行完毕catch中的处理逻辑,继续执行try…catch之后的代码
  3. 如果try中没有产生异常那么就不会执行catch中异常的处理逻辑
  4. Throwable类中定义了3个异常处理的方法
    1. String getMessage()返回此throwable的简短描述
    2. String toString()返回此theowable的详细消息字符串
    3. void printStackTrace()JVM打印异常对象默认此方法,异常信息是最全面的
  5. 多个异常使用捕获处理:
    1. 多个异常分别处理
    2. 多个异常一次捕获,多次处理
      1. 一个try多个catch注意事项;
        1. catch里边定义的异常变量如果有子父类关系,那么子类的异常变量必须写在上边,否则会报错
        2. 原因:try中如果出现了异常对象会把异常对象抛出给catch处理,抛出的异常对象会从上到下依次赋值给catch中定义的异常变量
    3. 多个异常一次捕获一次处理
  6. 如果finally中有return语句,永远返回finally中的结果,应该要避免这种写法

子父类异常:

  1. 如果父类抛出了多个异常,子类重写父类方法时,抛出和父类相同的异常或者是父类异常的子类或者不抛出异常
  2. 父类方法没有抛出异常,子类重写父类该方法时也不可抛出异常。此时如果子类产生异常只能捕获处理,不能声明抛出

自定义异常类:

  1. 自定义异常类必须继承Exception或者RuntimeException
    1. 继承Exception:那么自定义异常类就是一个编译期异常,如果方法内部抛出了编译期异常,就抛出或者处理这个异常
    2. 继承RuntimeExcrption:那么自定义的异常类就是一个运行期异常,无需处理,交给虚拟机处理(中断处理)
    3. 格式:
      1. public class XXXException extends Exception | RuntimeException {
        1. 添加一个空参数的构造方法
        2. 添加一个带异常信息的构造方法
      2. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值