9.Java中异常处理机制是什么
Java的异常处理通过五个关键字来实现,分别是捕获异常:try,catchsfinally;声明异常:throws;抛出异常:throw
- 一:try,catch捕获异常
- 二:finally回收资源
- 三:抛出异常throw
- 四:声明异常throws
一:try,catch捕获异常
下面展示一些 内联代码片
。
public class ExceptionTest {
public static void main(String[] args) {
try{ // 业务代码 }catch (Exception e){ // 出现异常 }
}
}
如果执行try块里的业务逻辑代码时出现异常,系统自动生成一个异常对象,当Java运行时环境收到异常对象时,会寻找能处理该异常对象的catch块,如果找到合适的catch块,则把该异常对象交给该catch块处理,这个过程被称为捕获(catch)异常。
如果Java运行时环境找不到捕获异常的catch块,则运行时环境终止,Java程序也将退出
二:finally回收资源
使用finally回收资源,有些时候程序在try块里打开了一些物理资源(例如数据库连接、网络连接和磁盘文件等),这些物理资源都必须显式回收。
Java的垃圾回收机制不会回收任何物理资源,垃圾回收机制只能回收堆内存中对象所占用的内存。
在哪里回收这些物理资源呢?在try块里回收?还是在catch块中进行回收?假设程序在try块里进行资源回收,如果try块的某条语句引起了异常,该语句后的其他语句通常不会获得执行的机会,这将导致位于该语句之后的资源回收语句得不到执行。如果在catch块里进行资源回收,但catch块完全有可能得不到执行,这将导致不能及时回收这些物理资源。
为了保证一定能回收try块中打开的物理资源,异常处理机制提供了finally块。不管try块中的代码是否出现异常,也不管哪一个catch块被执行,甚至在try块或catch块中执行了return语句,finally块总会被执行。
public class ExceptionTest {
public static void main(String[] args) {
try{
}catch (){
}finally {
System.out.println("回收资源");
}
}
}
上面程序的try块后增加了finally块,用于回收在try块中打开的物理资源。注意程序的catch块中有一条return语句,该语句强制方法返回。在通常情况下,一旦在方法里执行到return语句的地方,程序将立即结束该方法;现在不会了,虽然return语句也强制方法结束,但一定会先执行finally块里的代码。
在通常情况下,不要在finally块中使用如return或throw等导致方法终止的语句,一旦在finally块中使用了return或throw语句,将会导致try块、catch块中的return、throw语句失效。
三:抛出异常throw
位于方法内部,是异常出现的源头,制造异常。
四:声明异常throws
位于方法声明处,告诉方法可能出现异常啊。