• Java try catch finally语句

    在实际开发中,根据 try catch 语句的执行过程,try 语句块和 catch 语句块有可能不被完全执行,而有些处理代码则要求必须执行。例如,程序在 try 块里打开了一些物理资源(如数据库连接、网络连接和磁盘文件等),这些物理资源都必须显式回收。

    Java的垃圾回收机制不会回收任何物理资源,垃圾回收机制只回收堆内存中对象所占用的内存。

    所以为了确保一定能回收 try 块中打开的物理资源,异常处理机制提供了 finally 代码块,并且 Java 7 之后提供了自动资源管理(Automatic Resource Management)技术。

    finally 语句可以与前面介绍的 try catch 语句块匹配使用,语法格式如下:

    try {
        // 可能会发生异常的语句
    } catch(ExceptionType e) {
        // 处理异常语句
    } finally {
        // 清理代码块
    }

    对于以上格式,无论是否发生异常(除特殊情况外),finally 语句块中的代码都会被执行。此外,finally 语句也可以和 try 语句匹配使用,其语法格式如下:

    try {
        // 逻辑代码块
    } finally {
        // 清理代码块
    }
    

    使用 try-catch-finally 语句时需注意以下几点:

    1. 异常处理语法结构中只有 try 块是必需的,也就是说,如果没有 try 块,则不能有后面的 catch 块和 finally 块;
    2. catch 块和 finally 块都是可选的,但 catch 块和 finally 块至少出现其中之一,也可以同时出现;
    3. 可以有多个 catch 块,捕获父类异常的 catch 块必须位于捕获子类异常的后面;
    4. 不能只有 try 块,既没有 catch 块,也没有 finally 块;
    5. 多个 catch 块必须位于 try 块之后,finally 块必须位于所有的 catch 块之后。
    6. finally 与 try 语句块匹配的语法格式,此种情况会导致异常丢失,所以不常见。

    一般情况下,无论是否有异常拋出,都会执行 finally 语句块中的语句,执行流程如图 1 所示。


    图 1  try catch finally 语句执行流程图

更多...

加载中...