1.异常机制
2.受检异常和运行时异常
受检异常:必须try-catch
运行时异常:一般不进行处理,如果没有捕获处理这个异常(即没有catch),系统会把异常一直往上层抛,一直到最上层,最后要么是线程中止,要么是主程序终止。
3.自定义异常(throw/throws)
a.E是受检异常
- 如果一个方法后面跟了throws E,且(函数体中包含有throw E语句或这个函数调用了方法后面跟了throws E的函数),那么这个函数必须放在一个try..catch(E1)中调用,否则发生编译错误(非运行时异常未处理),其中E1为E或E的父类。
- 如果一个方法后面跟了throws E,但函数体其实并不会throw E,那么这个函数也必须放在一个try..catch(E1)中调用,否则发生编译错误(非运行时异常未处理),这说明方法后面是否跟了throws E是编译器是否会检查这个错误的标志。
- 如果一个方法后面没跟throws E,但函数体内使用了throw E,那么会发生编译错误(异常未处理)
- 如果try...catch(E)中调用的代码没有包含跟throws E的函数,那么会发生编译错误(不可达的异常)
- 如果一个方法后面跟了throws E,且被放在try..catch(E)中了,那么如果发生异常会被捕捉。
b.E是运行时异常,上述四种情况均不会发生编译错误。不管有没有跟throws E,都不影响捕捉异常。
注:如果一个异常只是Exception的子类,不是RuntimeException的子类,那么这是一个非运行时异常。否则,这是一个运行时异常。