Java异常中5个重要关键字:try,catch,finally,throws,throw
1、异常种类:系统错误,运行时异常(两者属于免检异常,不允许捕获或声明),异常(必检异常,编译器强制程序员检查并处理)
2、声明异常:有可能抛出必检异常的方法在定义的时候必须声明他可能抛出的必检异常的类型。
public void myMthod() throws Exception1,Exception2....
注意:如果方法没有在父类中声明异常,那么不能在子类中对其进行覆盖来声明 异常。
3、抛出异常:创建一个异常类型的实例然后抛出
throw new IOException("ioex");
可以这样理解,声明异常是告诉别人我这个方法里面有异常,抛出异常就是在这个方法里面创建这个异常实例。
注意:声明异常的关键字是throws,抛出异常的关键字是throw
4、捕获异常:当一个异常被抛出的时候可以在try-catch块中捕获和处理它。、
try{
...
}catch (Exception1 ex1){
...
}catch (Exception1 ex2){
...}
如果执行try过程中出现相应异常,由相应的catch块内的异常处理器对异常进行处理。寻找处理器的过程叫做捕获异常。
如果异常没有在当前的方法中被捕获,就被传给该方法的调用者,这个过程一直重复,直到异常被捕获或被传给main方法。
注意:catch块中异常被指定的顺序非常重要,父类的catch块出现在子类的catch块之前,会导致编译错误。
5、异常处理的优点
使方法抛出一个异常给他的调用者,调用者可以处理异常。一般情况下,被调用的方法不知道在出错的情况下做些什么,只有调用者知道如何处理,异常处理的根本优势就是将检测错误(由被调用的方法完成)和处理错误(由于调用方法完成)分离。
6、finally子句
不论异常是否出现或者是否被捕获,fianlly块中的代码都会执行,即使在到达finally块之前有return子句,也会执行,所以可以在这里处理例如文件关闭等操作。
一个应用实例:
等待输入,直至正确输入为止(为什么感觉直接用if判断是否输入有误更好呢??说好的尽量不要把异常处理用作简单的逻辑测试呢?)