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 {
// 确保这些代码一定会被执行
}