Java自定义异常实例详解

73 阅读2分钟

1、为什么需要自定义异常类?

Java中不同的异常类,分别表示着某一种具体的异常情况,那么在开发中总是有些异常情况是核心类库中没有定义好的,因此我们需要根据自己业务的异常情况来定义异常类。比如:考试成绩负数问题等。

2、异常类如何定义?

①自定义一个编译时异常类型:自定义类 并继承 java.lang.Exception

②自定义一个运行时异常类型:自定义类 并继承 java.lang.RuntimeException

(这里请注意自定义的异常只能通过throw抛出)

自定义异常:

(1)要继承一个异常类型

(2)建议提供至少两个构造器,一个是无参构造,一个是(String message)构造器

(3)自定义异常对象只能手动抛出。抛出后由try...catch..处理,也可以throws丢给上层调用者处理“烂摊子”。

演示自定义异常(满足组成三角形):

TestDefineException.java

package com.wuwuhui.exception;
​
/*
    自定义一个异常,表示不能组成三角形的时候抛出异常
 */
public class TestDefineException {
    public static void main(String[] args) {
        try {
            Triangle t = new Triangle(1,2,3);
//            Triangle t = new Triangle(1,1,1);
            System.out.println("t="+t);
        } catch (NotATriangleException e) {
//            throw new RuntimeException(e);
            e.printStackTrace();
        }
​
    }
}
​

NotATriangleException.java


package com.wuwuhui.exception;
​
//NotATriangleException是一个编译时异常,所以应该继承 java.lang.Exception
public class NotATriangleException extends Exception{
//    构造器
    public NotATriangleException() {
    }
​
    public NotATriangleException(String message) {
        super(message);
    }
}
​

Triangle.java

package com.wuwuhui.exception;
​
public class Triangle {
//    可以加上一个final不允许修改,不加也可以
    private final double a;
    private final double b;
    private final double c;
​
//    构造方法
    public Triangle(double a, double b, double c) throws NotATriangleException{
//        这里加上我们的判断条件,抛出异常
        if(a<=0 || b<=0 || c<=0 || a+b<=c || b+c<=a || a+c<=b){
            throw new NotATriangleException("请查看三边的值是否满足要求哦~(三边都大于0且两边之和大于第三边!)");
        }
        this.a = a;
        this.b = b;
        this.c = c;
    }
//因为我们用了final,所以使用get/set方法(快捷键是Alt+Insert)时就只有get
    public double getA() {
        return a;
    }
​
    public double getB() {
        return b;
    }
​
    public double getC() {
        return c;
    }
}
​