更新时间:2021-11-11 来源:黑马程序员 浏览量:

Java中定义了大量的异常类,虽然这些异常类可以描述编程时出现的大部分异常情况,但是在程序开发中有时可能需要描述程序中特有的异常情况,例如在设计divide()方法时不允许被除数为负数。为了解决这样的问题,Java允许用户自定义异常,但自定义的异常类必须继承自Exception或其子类。接下来通过一个案例来学习自定义异常的创建,如例4-35所示。
例4-35 DivideByMinusException.java
//下面的代码是自定义一个异常类继承自 Except ion
public DivideByMinusException extends Exception
public DivideByMinusException (){
super () //调用Exception无参的构造方法
}
public DivideByMinusException (String message){
//调用 Exceptlon有参的构造方法
}
}在实际开发中,如果没有特殊的要求,自定义的异常类只需继承Exception类,在构造方法中使用super()语句调用Exception的构造方法即可。
既然自定义了异常,那么该如何使用呢?这时就需要用到throw关键字,在程序指定位置通过throw关键字抛出自定义的异常对象,然后对抛出的异常进行异常处理。
接下来重新对例4-33中的divide()方法进行改写,在divide()方法中判断被除数是否为负数,如果为负数,就是用throw关键字向调用者抛出自定义的DivideByMinusException异常对象,如例4-36所示。
例4-36 Example36.java
public class Exanple36 (
//下面的方法实现了两个整数相除
public static int divide(int x,int y) throws DivideByMinuaException{
if (y ==0){
//使用throw关键字声明异常对象
throw new DivideByMinuaException("除数是0")
}
int result. =x / yL; //定义一个变量resulc记录两个散相除的结果
return result; //将结果返回
publlc static void main(String[] args) {
try {
int result =divide (4, 0);
System.out.println(result);
} catch (DivideByMinuaException e) {
Syatem.out.println(“捕获的异常信息为:" +e.getMesaage()):
}
}
}运行结果如下图所示:

图4-40 例4-36运行结果
例4-36中,divide()方法通过逻辑判断对除法运算的除数是否为0进行了判断,如果除数为0就使用throw关键字抛出自定义的DivideByMinusException异常对象,然后通过throws关键字抛出异常,并在最后通过try…catch语句捕获异常。从图4-40可以看出,程序执行后判断出除数为0,抛出了指定的异常信息。
毕业32个工作日,平均薪资11147元,就业率95%,广州黑马AI智能应用开发(Java)学科20250326班
2026-03-05黑马程序员2025全国就业数据发布:全学科平均就业率92.07%,AI开发类就业平均薪资达11869.67元。
2026-03-05黑马全国校区齐开班!场面太太太壮观了!
2026-03-03AI智能应用开发课程紧贴企业刚需,全程高效学习,直达中高级软件开发水平
2026-02-28风口正劲!黑马程序员又一AI智能应用开发班毕业当天100%就业!
2026-02-2722岁学鸿蒙,拿下人生第一桶金:25届毕业生,华为鸿蒙创新赛2等奖得主
2026-01-08