异常的概念
程序运行过程中出现了非预期的现象,出现异常如果不处理将导致程序终止运行
异常处理的必要性:任何程序都可能存在大量的未知问题、错误;如果不对这些问题进行正确的处理,则可能导致程序中断,造成不必要的损失。
异常处理:Java编程于洋使用了异常处理机制为程序提供了异常处理能力
异常的分类
Throwable类是Java语言中所有错误和异常的Throwable类。 只有作为此类(或其一个子类)的实例的对象由Java虚拟机抛出,或者可以由Java throw语句抛出。 类似地,只有这个类或其子类可以是catch子句中的参数类型。 对于异常,编译时检查的目的Throwable和任何子类Throwable ,是不是也无论是子类RuntimeException或Error被视为检查的异常。
- Error: JVM、硬件、执行逻辑错误,不能手动处理
- Exception:程序存在运行和配置产生的问题,可处理
- RuntimeException 运行时异常,可处理或不处理。RuntimeException和其子类都属于运行时异常
- CheckedException 检查时异常,必须处理。其他Exception都属于检查时异常。
常见的运行时异常
| 类型 | 说明 | | —- | —- | | NullPointerException | 空指针异常 | | ArrayIndexOutOfBoundsExcption | 数组下标越界 | | ClassCastException | 类型转换异常 | | NumberFormatExcption | 数字格式化异常 | | AritmeticException | 算数异常 |
异常的产生
当程序在运行时候遇到了不符合规范的代码或结果是,会产品异常或程序员使用throw关键字手动抛出的异常埋点。
异常的传递
按照方法的调用链反向传递,如始终没有处理异常,最终会由JVM进行默认的异常处理(打印堆栈跟踪信息)
异常的处理
关键字
| 关键字 | 描述 |
|---|---|
| try | 将可能产生异常的代码,使用写入try代码块中 |
| catch | 捕获异常类型并处理 |
| finally | 无论是否发生异常,代码块总能执行 |
| throw | 手动声明异常 |
| throws | 声明方法可能要抛出的异常 |
多重catch,遵循从子到父的顺序,父类在最后边
异常的定义
继承 RuntimeException 或 Exception
package com.jyusun.origin.commons.core.exception;import com.jyusun.origin.commons.core.base.BaseResultCode;import lombok.Getter;/*** 作用描述: - 基础异常 自定义异常** @author jyusun at 2020/1/2 17:08* @since 1.0.0*/public abstract class BaseException extends RuntimeException {@Getterprotected String code;/*** 异常信息构造函数** @param code {@code Integer} 消息编码* @param message {@code String} 消息描述*/public BaseException(String code, String message) {super(message);this.code = code;}/*** 异常信息构造函数** @param baseResultCode {@link BaseResultCode} 消息枚举*/public BaseException(BaseResultCode baseResultCode) {this(baseResultCode.code(), baseResultCode.message());}/*** 异常信息构造函数** @param baseResultCode {@link BaseResultCode} 消息枚举* @param throwable {@link Throwable} 异常信息*/public BaseException(BaseResultCode baseResultCode, Throwable throwable) {this(baseResultCode.code(), baseResultCode.message(), throwable);}/*** 异常信息构造函数** @param code {@code Integer} 消息编码* @param message {@code String} 消息描述* @param throwable {@link Throwable} 异常信息*/public BaseException(String code, String message, Throwable throwable) {super(message, throwable);this.code = code;}}
