九、异常
异常
什么是异常:
异常(exception)是在运行过程中代码序列中产生 种例外情况。
注意:exception 是异常而不是error错误,同时exception 异常是所有异常的祖宗
常见的异常:
异常处理的关键字:
Java异常处理通过5个关键字控制:try、catch、 throw、throws和finally。
try-catch和finally:
finally回收资源:
有些时候,try块内引用了一些物理资源,例如数据库连接、网络连接或磁盘文件等,那么一旦try块内出现异常,这些资源将无法保证被释放必须要有一种很确切的办法确保资源一定得到释放, 而不管是否存在异常,这就是finally存在的原因 。
多重catch:
某些情况下,try块中的代码也可能引发多种异常定义两个或更多的catch子句,每个子句捕获一种类型的异常,每个catch各司其职。
嵌套try-catch:
和嵌套的if语句类似,try-catch结构内也可以有另外 一个try-catch子结构,子结构既可以放在父结构的 try块,也可以放在父结构的catch块和finally块,不 会产生任何冲突 当子结构内出现异常是由子结构自己的catch块捕捉 并处理,当然,如果子结构的catch块没有捕捉到已 经发生的异常,那么这个异常将被父结构中的catch 块捕捉。
注意:如果异常没有被捕获,程序终止运行,先由里面的捕获,如果无法解决,再由外面的捕获
throw:
throw是语句抛出一个异常。
throws:
throws是方法可能抛出异常的声明。throws和throw都是只抛出但不处理,和渣男很像。
throw和throws的区别:
- throws 用在方法声明后,跟在后面的是异常类名 (Execution ),throw 用在方法体内,跟的是异常的对象名 (new Execution)。
- throws 后可以跟多个异常类名,用逗号隔开;而 throw 只能抛出一个异常对象名。
- throws 表示抛出的异常由该方法调用者处理,throw表示抛出的异常由自己处理(定义方法体内)
- throws 表示会出现异常的一种可能性,不一定会发生该异常;throw 要是执行了则一定抛出了某种异常且后面的代码都不执行。
注意:如果都只抛出去不捕获的话,最后会抛给main方法,最终会由JVM处理