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;
}
}