异常的概念

程序运行过程中出现了非预期的现象,出现异常如果不处理将导致程序终止运行
异常处理的必要性:任何程序都可能存在大量的未知问题、错误;如果不对这些问题进行正确的处理,则可能导致程序中断,造成不必要的损失。
异常处理:Java编程于洋使用了异常处理机制为程序提供了异常处理能力

异常的分类

Throwable类是Java语言中所有错误和异常的Throwable类。 只有作为此类(或其一个子类)的实例的对象由Java虚拟机抛出,或者可以由Java throw语句抛出。 类似地,只有这个类或其子类可以是catch子句中的参数类型。 对于异常,编译时检查的目的Throwable和任何子类Throwable ,是不是也无论是子类RuntimeExceptionError被视为检查的异常。

  • Error: JVM、硬件、执行逻辑错误,不能手动处理
  • Exception:程序存在运行和配置产生的问题,可处理
    • RuntimeException 运行时异常,可处理或不处理。RuntimeException和其子类都属于运行时异常
    • CheckedException 检查时异常,必须处理。其他Exception都属于检查时异常。

      常见的运行时异常

      | 类型 | 说明 | | —- | —- | | NullPointerException | 空指针异常 | | ArrayIndexOutOfBoundsExcption | 数组下标越界 | | ClassCastException | 类型转换异常 | | NumberFormatExcption | 数字格式化异常 | | AritmeticException | 算数异常 |

异常的产生

当程序在运行时候遇到了不符合规范的代码或结果是,会产品异常或程序员使用throw关键字手动抛出的异常埋点。

异常的传递

按照方法的调用链反向传递,如始终没有处理异常,最终会由JVM进行默认的异常处理(打印堆栈跟踪信息)

异常的处理

关键字

关键字 描述
try 将可能产生异常的代码,使用写入try代码块中
catch 捕获异常类型并处理
finally 无论是否发生异常,代码块总能执行
throw 手动声明异常
throws 声明方法可能要抛出的异常

多重catch,遵循从子到父的顺序,父类在最后边

异常的定义

继承 RuntimeException 或 Exception

  1. package com.jyusun.origin.commons.core.exception;
  2. import com.jyusun.origin.commons.core.base.BaseResultCode;
  3. import lombok.Getter;
  4. /**
  5. * 作用描述: - 基础异常 自定义异常
  6. *
  7. * @author jyusun at 2020/1/2 17:08
  8. * @since 1.0.0
  9. */
  10. public abstract class BaseException extends RuntimeException {
  11. @Getter
  12. protected String code;
  13. /**
  14. * 异常信息构造函数
  15. *
  16. * @param code {@code Integer} 消息编码
  17. * @param message {@code String} 消息描述
  18. */
  19. public BaseException(String code, String message) {
  20. super(message);
  21. this.code = code;
  22. }
  23. /**
  24. * 异常信息构造函数
  25. *
  26. * @param baseResultCode {@link BaseResultCode} 消息枚举
  27. */
  28. public BaseException(BaseResultCode baseResultCode) {
  29. this(baseResultCode.code(), baseResultCode.message());
  30. }
  31. /**
  32. * 异常信息构造函数
  33. *
  34. * @param baseResultCode {@link BaseResultCode} 消息枚举
  35. * @param throwable {@link Throwable} 异常信息
  36. */
  37. public BaseException(BaseResultCode baseResultCode, Throwable throwable) {
  38. this(baseResultCode.code(), baseResultCode.message(), throwable);
  39. }
  40. /**
  41. * 异常信息构造函数
  42. *
  43. * @param code {@code Integer} 消息编码
  44. * @param message {@code String} 消息描述
  45. * @param throwable {@link Throwable} 异常信息
  46. */
  47. public BaseException(String code, String message, Throwable throwable) {
  48. super(message, throwable);
  49. this.code = code;
  50. }
  51. }