Java使用枚举类实现自定义异常
文章开头先阐述一些关于异常的知识:
- Java异常的根本父类为Throwable, Throwable有两个子类:Error和Exception。
- Exception常见的子类有:DataFormatException, IOException, NoSuchFieldException, RuntimeException, SQLException, TimeoutException。
- RuntimeException常见的子类有:BufferOverflowException, ClassCastException, IndexOutOfBoundsException,NullPointerException, SystemException。
- Error不需要讨论,这些错误是正常编码不会出现或者在程序层面无法处理的事情。
- Error和RuntimeException是运行时异常,其他的都是非运行时异常。运行时异常即需要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以内的加法