Java使用枚举类实现自定义异常


Java使用枚举类实现自定义异常

文章开头先阐述一些关于异常的知识:

  1. Java异常的根本父类为Throwable, Throwable有两个子类:Error和Exception。
  2. Exception常见的子类有:DataFormatException, IOException, NoSuchFieldException, RuntimeException, SQLException, TimeoutException。
  3. RuntimeException常见的子类有:BufferOverflowException, ClassCastException, IndexOutOfBoundsException,NullPointerException, SystemException。
  4. Error不需要讨论,这些错误是正常编码不会出现或者在程序层面无法处理的事情。
  5. ErrorRuntimeException是运行时异常,其他的都是非运行时异常。运行时异常即需要try-catch包裹才可正常编译通过的异常。

现在开始编写自定义异常。

1. 创建ErrorCode接口

编写自定义异常代码

public interface ErrorCode {

    /**
     * 获取错误码
     * @return
     */
    String getCode();

    /**
     * 获取错误信息
     * @return
     */
    String getMsg();
    
}

2. 创建MyCodeEnum枚举类

编写代码实现接口中的所有方法

public enum MyCodeEnum implements ErrorCode{
    NOT_FOUND_PAGE("404","找不到网站资源"),
    NOT_FOUND_FILE("888","找不到文件资源"),
    NOT_O_TEN("233","只能求10以内的加法"),
    ;

    MyCodeEnum(String code,String msg){
        this.code = code;
        this.msg = msg;
    }

    private final String code;
    private final String msg;

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getMsg() {
        return msg;
    }
}

3. 创建MyException类继承RunTimeException

public class MyException extends RuntimeException{

    public MyException(String message) {
        super(message);
    }

    public MyException(ErrorCode errorCode){
        super(errorCode.getCode());

    }

}

4. 在StringTest类中测试自定义异常,同时可通过枚举选择异常类型

import org.junit.Test;

public class ThrowTest {
	public int sum(int numberA, int numberB) throws MyException {
        if (numberA > 10 || numberB > 10 || numberA < 0 || numberB < 0) {
            throw new MyException(MyCodeEnum.NOT_O_TEN);
        }
        return numberA + numberB;
    }
    
    @Test
    public void demo() {
        try {
            System.out.println("两数之和为: " + sum(19,12));
        } catch (MyException e) {
            e.printStackTrace();
        }
    }
}

异常抛出结果如下:

com.company.MyException: 只能求10以内的加法

文章作者: Frank Wang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Frank Wang !
  目录