1.Throwable类型是异常类型的根类
2.try块与异常处理程序catch
- 在一个方法中如果抛出了异常,那么该方法就会在抛出异常的过程中结束;要想让该方法继续执行,那么就得在该方法中捕获异常:使用try块即可。
- 捕获(抛出的)异常之后当然就得处理异常,而catch就是异常处理程序:捕获异常之后,异常类型会作为参数与catch的参数进行匹配,匹配到了就跳转到相应的catch块中执行异常处理程序。并且catch可以有多个,跳转到其中一个执行之后便会停止(这与switch不同)。
try {
} catch(ExceptionType1 e1) {
} catch(ExceptionType2 e2) {
} catch(ExceptionType3 e3) {
} ...
3.通过继承Throwable来自定义一个异常类
通常自定义异常并不需要很复杂,甚至不需要类里面写任何代码,你只需要将自定义的异常的类名好好起一个就行了。
class MyException extends Throwable {} //自定义一个异常
public class Test {
public void f() throws MyException { //异常说明
throw new MyException(); //1.自己new一个异常并抛出
}
public static void main(String[] args) {
Test t = new Test();
try {
t.f(); //2.抛出的异常被捕获
} catch (MyException e) {
System.out.println("抓到了个异常"); //3.对异常进行处理
}
}
}
4.异常说明
异常说明不是抛出异常,而是告诉客户端程序员某方法可能会抛出某种类型的异常:
public void f() throws MyException { //异常说明,f()方法可能将会抛出MyException异常
throw new MyException(); //果然抛出了异常。
}
上面代码的第2行中果然抛出了异常,但也可以不抛出异常,因为编译器相信第1行代码的异常说明,并且真的相信用户能以抛出异常这种方式使用该方法。规定编译器这样认为的好处是:为异常先占个位置,以后就可以抛出这种异常而不用修改已有的代码。