自定义异常简单用法和复杂用法
异常的简单用法
public class MyExceptionDemo {
public static void main(String[] args) throws MyException {
try {
run();
} catch (Exception e) {
System.out.println("an exception happened");
System.out.println(e.getMessage());
}
}
static void run() throws MyException {
try {
int a = 1 / 0;//模拟产生异常
}catch(Exception e){
throw new MyException("zero can't make divide");//抛出自定义异常
}
}
}
//自定义异常类
class MyException extends Exception {
public MyException() {
}
public MyException(String message) {
super(message);//将抛出的异常信息说明存储到消息中
}
}
运行结果:
异常的复杂用法,枚举作为异常的参数
这样做可以让异常传递其它需要的自定义信息,而不仅仅是一个字符串
import java.util.Date;
public class MyExceptionDemo {
public static void main(String[] args) throws MyException {
try {
run();
} catch (MyException e) {
System.out.println("an exception happened");
//获取异常的信息
MyExceptionEnum em = e.getExceptionEnum();
System.out.println(em.getMsg());
System.out.println(em.getDate().toString());
}
}
static void run() throws MyException {
try {
int a = 1 / 0;//模拟产生异常
} catch (Exception e) {
throw new MyException(MyExceptionEnum.NotAsDivide);//抛出自定义异常
}
}
}
class MyException extends Exception {
private MyExceptionEnum exceptionEnum;
public MyException() {
}
/**
* 使用枚举抛出异常的高级用法
*
* @param em
*/
public MyException(MyExceptionEnum em) {
super(em.getMsg());
this.exceptionEnum = em;
}
public MyExceptionEnum getExceptionEnum() {
return exceptionEnum;
}
public void setExceptionEnum(MyExceptionEnum exceptionEnum) {
this.exceptionEnum = exceptionEnum;
}
}
enum MyExceptionEnum {
NotAsDivide("零不能做除数", new Date()), Other("未处理", new Date());
private String msg;//记录消息
private Date date;//记录产生时间
//必须要有有参构造函数,而且必须和成员变量一致
MyExceptionEnum(String msg, Date date) {
this.msg = msg;
this.date = date;
}
MyExceptionEnum() {
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
运行结果: