异常体系的根类是:Throwable
- Throwable:
- Error: 重大的问题,我们处理不了。也不需要编写代码处理。比如说内存溢出。
- Exception: 一般性的错误,是需要我们对编写的代码进行处理。
- 运行期异常: 在运行时出问题,需要修正代码
- 编译期异常:就是一般的异常(编译期异常)
- Throwable类的三个重要方法
- getMessage(): 获取异常信息,返回字符串。
- toString(): 获取异常类名和异常信息,返回字符串。
- printStackTrace(): 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。
- 异常捕捉与处理
- try...catch
- try...catch...catch...
- try...catch...catch...finally
多个异常同时被捕获的时候,记住一个原则:先逮小的,再逮大的。
Throw与throws抛出异常
- throw : 将产生的异常抛出(强调的是动作),抛出的既可以是异常的引用,也可以是异常对象。(
位置: 方法体内
)- 后面是RuntimeException及其子类,调用时可以不处理
- 后面是编译异常,调用时需要处理(
Throws
ortry...catch
)
- throws : 如果一个方法可能会出现异常,但没有能力处理这种异常,可以在方法声明处用throws子句来声明抛出异常。用它修饰的方法向调用者表明该方法可能会抛出异常(可以是一种类型,也可以是多种类型,用逗号隔开)(
位置: 写在方法名,或方法名列表之后 ,在方法体之前。
)
注意 : 调用可能会抛出异常
的方法,必须添加try-catch代码块尝试去捕获异常
或者 添加throws声明
来将异常 抛出给更上一层的调用者进行处理
子类重写父类方法,父类未抛出异常,子类也不能抛出异常(可以try...catch)
自定义异常
public class CustomException extends Exception {
protected String code;
protected String message;
//无参构造方法
public CustomException(){
super();
}
//有参的构造方法
public CustomException(String message,String code){
super(message);
this.message = message;
this.code= code;
}
// 用指定的详细信息和原因构造一个新的异常
public CustomException(String message, Throwable cause){
super(message,cause);
}
//用指定原因构造一个新的异常
public CustomException(Throwable cause) {
super(cause);
}
}