Java——finally的作用和常用场景

 finally介绍,finally一定会执行吗

finally

一般搭配 try--catch--finally  或者 try--finally 使用。

一般来说,无论try中是否抛出异常,都会执行finally。

finally也并不是一定会执行的,finally没有执行的可能:

1、JVM停止运行

调用system.exit() 或者 Runtime.getRuntime().halt();

2、执行try或者catch代码的线程被中断或杀死

比如守护线程刚开始执行到finally代码块,此时没有任何其他非守护线程,那么虚拟机将退出,此时JVM不会等待守护线程的finally代码块执行完成。

3、try中发生死循环或者死锁

4、没有进入try代码块

常用场景

finally通常来做资源清除工作。如关闭文件等。此方法可以友好的处理程序的异常,同时也方便了后期的排除和维护。

多用于网络I/O,磁盘I/O这种有流操作的。

无论是网络还是磁盘,任意两个硬件之间想要互相通信一定要建立连接,建立连接就有存储消耗。

1. 资源释放:finally块经常用于释放打开的资源,如文件、数据库连接、网络连接等。无论是否发生异常,finally块中的代码都会被执行,这样可以确保资源得到正确地关闭和释放。

FileInputStream file = null;
try {
    file = new FileInputStream("file.txt");
    // 执行一些操作
} catch (IOException e) {
    // 处理异常
} finally {
    if (file != null) {
        try {
            file.close();
        } catch (IOException e) {
            // 处理关闭文件时的异常
        }
    }
}

2. 清理操作:finally块也可以用于执行一些清理操作,例如清理临时文件、删除临时数据等。无论是否发生异常,finally块中的代码都会被执行,从而确保程序在结束时进行必要的清理。

try {
    // 执行一些操作
} catch (Exception e) {
    // 处理异常
} finally {
    // 执行清理操作
}

3. 确保某些代码一定会被执行:有时候,我们希望某些代码一定会被执行,无论是否发生异常。在这种情况下,可以将这些代码放在finally块中。

try {
    // 执行一些操作
} finally {
    // 确保这些代码一定会被执行
}

你可能感兴趣的:(java,开发语言)