Java的自定义异常类
Java的异常处理机制可以让程序具有极好的容错性,让程序更加健壮。当程序运行出 现意外情形时,系统会自动生成一个 Exception对象来通知程序,从而实现将“业务功 能实现代码”和“错误处理代码”分离,提供更好的可读性。
Java把所有的非正常情况分成两种:异常(Exception)和错误(Error),它们都继承Throwable父类。
Error错误,一般是指与虚拟机相关的问题,如系统崩溃、虚拟机错误、动态链接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断。通常应用程序无法处理 这些错误,因此应用程序不应该试图使用catch块来捕获Error对象。在定义该方法 时,也无须在其throws子句中声明该方法可能抛出Error及其任何子类。
Java可以自定义异常,而自定义异常都应该继承Exception基类;如果希望自定义Runtime异常,则应该继 承RuntimeException基类。定义异常类时通常需要提供两个构造器:一个是无参数的 构造器;另一个是带个字符串参数的构造器,这个字符串将作为该异常对象的描述信息(也就是异常对象的getMessage()方法的返回值)。
示例代码:
package com.hhd.exception;
/**
* 自定义异常
*
*/
public class CustomException {
public static void main(String[] args) {
try {
System.out.println(shang(5,0));
} catch (DivideNegativeException e) {//捕获自定义异常
// TODO: handle exception
e.printStackTrace();
} catch (DivideZeroException e) {//捕获自定义异常
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static int shang(int x, int y) throws DivideNegativeException,
DivideZeroException {
if (y < 0) {
// 抛出自定义DivideNegativeException异常
throw new DivideNegativeException("你输入的除数是:" + y + ",除数不能为负数!"); }
if (y == 0) {
// 抛出自定义DivideZeroException异常
throw new DivideZeroException("你输入的除数是:" + y + ",除数不能为 0!");
}
int m = x / y;
return m;
}
}
/**
* 自定义除0异常
*
*/
class DivideZeroException extends Exception {
/**
*
*/
private static final long serialVersionUID = 1L;
// 1、提供一个无参构造器
public DivideZeroException() {
}
// 2、带一个字符串参数的构造器
public DivideZeroException(String msg) {
super(msg);
// System.out.println("处理异常");
}
}
/**
* 自定义除负数异常
*
*
*/
class DivideNegativeException extends Exception {
/**
*
*/
private static final long serialVersionUID = 1L;
public DivideNegativeException() {
}
public DivideNegativeException(String msg) {
super(msg);
}
}
示例代码执行结果: