1、讲解
因为项目中会出现特有的问题,而这些问题并未被Java所描述并封装对象。或者说,一些在项目需求中是异常,但是对于程序本身并不是异常的,Java自带的Exception类不会对其进行处理,那么就需要我们自己对原有的Exception类进行扩充,成为自定义的异常处理类
异常Exception的父级就是Throwable类了,除了Exception类外,Throwable还有一个子类Error 。注意异常,与错误的区别
编写自己的异常类时需要记住下面的几点。
- 所有异常都必须是 Throwable 的子类。
- 如果希望写一个检查性异常类,则需要继承 Exception 类。
- 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。
2、使用:
可以像下面这样定义自己的异常类:
classMyException extendsException{}
继承Exception原因:
异常体系有一个特点:因为异常类和异常对象都被抛出。
他们都具备可抛性。这个可抛性是Throwable这个体系中独有特点。只有这个体系中的类和对象才可以被throws和throw操作。
throws和throw的区别
throws使用在函数上。
throw使用在函数内。
throws后面跟的异常类。可以跟多个。用逗号隔开。
throw后跟的是异常对象。
所以若要写需要有抛出异常的方法时:
当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。
要么在内部try catch处理。
要么在函数上声明让调用者处理。(就是在函数声明的地方加上throws)
1、例如加函数声明:
public static void a() throws MyException {
//方法内容
。。。。。
throw new MyException();
}
注意函数声明处要声明throws MyException,然后函数内部为throw。
2、例如try-catch:
try {
//函数内容
......
throw new MyException("Originated in b()");
} catch(MyException e) {
e.toString();
}
3、写法:
发现打印的结果中只有异常的名称,却没有异常的信息。
因为自定义的异常并未定义信息。
如何定义异常信息呢?
因为父类中已经把异常信息的操作都完成了。
所以子类只要在构造时,将异常信息传递给父类通过super语句。
那么就可以直接通过getMessage方法获取自定义的异常信息。
这部分就是要在自定义异常类中写明。可以写各种各样的异常处理方法,带各种参数的,比如带有String message的,带错误码的等等
// 最基本的一个处理
public MyException(String message)
{
super(message);
}
//带有起因的处理
public MyException(String message, Throwable cause)
{
super(message, cause);
}
还可以继续写更详细的异常处理函数,super函数自身可以带string,cause参数,如果想要加更多的信息需要自己写函数加进去