美文网首页
Java自定义异常

Java自定义异常

作者: 轻轻敲醒沉睡的心灵 | 来源:发表于2020-12-07 22:58 被阅读0次

项目中,有些情况下需要抛出特定的异常来进行提示,这时就需要我们自己来自定义异常来使用。

1. throw跟throws关键字

  • throws关键字
    用来声明一个方法可能产生的所有异常,不做任何处理而是将异常往上传,谁调用我我就抛给谁。
    • 用在方法声明后面,跟的是异常类名
    • 可以跟多个异常类名,用逗号隔开
    • 表示抛出异常,由该方法的调用者来处理
    • throws表示出现异常的一种可能性,并不一定会发生这些异常
  • throw关键字
    用来抛出一个具体的异常类型
    • 用在方法体内,跟的是异常对象名
    • 只能抛出一个异常对象名
    • 表示抛出异常,由方法体内的语句处理
    • throw则是抛出了异常,执行throw则一定抛出了某种异常

2. RuntimeException和Exception

  1. java将所有的错误封装为一个对象,其根本父类为Throwable, Throwable有两个子类:Error和Exception。
  2. Error是Throwable 的子类,用于指示合理的应用程序不应该试图捕获的严重问题。大多数这样的错误都是异常条件。虽然 ThreadDeath 错误是一个“正规”的条件,但它也是 Error 的子类,因为大多数应用程序都不应该试图捕获它。在执行该方法期间,无需在其 throws 子句中声明可能抛出但是未能捕获的 Error的任何子类,因为这些错误可能是再也不会发生的异常条件。
  3. Exception类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件。
  4. RuntimeException是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。可能在执行方法期间抛出但未被捕获的RuntimeException 的任何子类都无需在 throws 子句中进行声明。它是Exception的子类。
    • 非RuntimeException必要自己写catch块处理掉。如果不处理,程序将出现编译错误。API中写了throws的Exception都不是RuntimeException。
    • RuntimeException不用try catch捕捉将会导致程序运行中断,若用try catch捕捉则不会中断。一般情况下。对于RuntimeException的子类最好也使用异常处理机制。虽然RuntimeException的异常可以不使用try...catch进行处理,但是如果一旦发生异常,则肯定会导致程序中断执行,所以,为了保证程序再出错后依然可以执行,在开发代码时最好使用try...catch的异常处理机制进行处理。
image.png
  1. 常见的RuntimeException
    • NullPointerException -- 空指针异常:见的最多了,一般都是在null对象上调用方法出现;
    • NumberFormatException -- 数字格式化异常:继承IllegalArgumentException,字符串转换为数字时出现;
    • ArrayIndexOutOfBoundsException -- 数组越界异常;
    • StringIndexOutOfBoundsExceptio -- 字符串越界异常;
    • ClassCastException -- 类型转换错误;
    • IllegalArgumentException -- 非法参数;

3. 自定义异常

    1. 继承Throwable
    1. 继承Exception
    1. 继承RuntimeException

我一般是继承RuntimeException,捕获到以后抛给全局异常或者response返回。

import lombok.Getter;
import lombok.Setter;

public class MyArgumentException extends RuntimeException {

    private static final long serialVersionUID = 1L;
    
    /**
     * 请求的参数数据,若参数校验不通过,此字段存储请求参数,返回前端
     */
    @Getter
    @Setter
    private Object paramData;
    
    public MyArgumentException() {
        super();
    }
    
    public MyArgumentException(String message) {
        super(message);
    }
    
    public MyArgumentException(String message, Object paramData) {
        super(message);
        this.paramData = paramData;
    }
    
    public MyArgumentException(String message, Throwable cause) {
        super(message, cause);
    }
    
    public MyArgumentException(Throwable cause) {
        super(cause);
    }

}

在业务中将此异常抛给全局异常。

相关文章

网友评论

      本文标题:Java自定义异常

      本文链接:https://www.haomeiwen.com/subject/ixutgktx.html