体系
关系
运行时异常(RuntimeException)和可检查异常的区别
1.父类不同:运行时异常的父类为RuntimeException;而可检查异常的父类是Exception;
2.处理方式不同:可检查异常需要强制处理:通过try-catch快把和throws处理;
标准处理流程
1.try块包裹可能出现的异常代码;
2.catch用于捕获并处理异常(含运行时的异常),每个catch块处理一个异常;
3.一旦执行出现异常,流程转向相应的catch块,try块的后续代码不再执行;
4.多个catch块只有一个会执行;表明一旦发现异常就停止并捕获,
5.finally块,不管是否出现异常都会执行;
6.catch块也可以处理RuntimeException(运行时的异常);
7.catch块中声明能够捕获父类,则抛出子类异常时也可以被处理;
8.如果catch块中声明捕获的异常存在父子关系,则需要把子类放在前面,父类放在后面,否则子类无法被执行;
9.try块中,try块必须有,catch和finally二中其中一个也必须有,也可以两种都有;
10.两个catch中的异常可合并在一起(非父子关系),格式ExceptionA | ExceptionB;
11.return不论在正常流程还是异常流程中,finally都会执行;
12.System.exit(0)会关闭虚拟机,finally不会执行;
throw和throws的区别
1.throws后跟异常名;throw后跟异常实例;
2.throws表达的是该方法会抛出此异常;throw是抛出异常;
3.throws是方法签名的一部分;throw是方法体的一部分;
自定义异常
新建一个类继承相应父类异常;
例:
public class StockInsufficentException extends RuntimeException {
public StockInsufficentException(){
super();
}
public StockInsufficentException(String message,Throwable cause){
super(message,cause);
}
public StockInsufficentException(String message){
super(message);
}
public StockInsufficentException(Throwable cause){
super(cause);
}
}