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

news/2024/7/7 20:18:16

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


http://lihuaxi.xjx100.cn/news/1457610.html

相关文章

PoseiSwap 更新质押系统,并将在 8 月18 日开启“Trident ”快照

自 DeFi Summer 后,DeFi 设施整体的形态并未发生本质的变化,我们看到 DeFi 应用仍旧不具向外长期捕获价值、用户的能力,老旧叙事导致 DeFi 赛道整体的发展停滞不前。伴随着行业进入到下行周期,DeFi 赛道的资金、用户不断出逃&…

NOTA标记多肽氨基酸试剂,NOTA-E(cRGDfK)2的化学特性

今日文章关键词:DOTA 偶联肽,NOTA-E(cRGDfK)2,NOTA标记多肽氨基酸试剂 产品描述:DOTATATE acetate 是一种 DOTA 偶联肽,可以被放射性核素标记以用于正电子发射断层扫描 (PET) 成像和肽受体放射性核素治疗 (PRRT)。 英…

零信任架构演进与实践:探讨零信任安全模型在不断发展的背景下的最新趋势和实际应用案例

随着信息技术的迅猛发展,企业的网络安全面临着日益复杂的挑战。传统的网络安全模型已经不再适用于如今的威胁环境,因此,零信任架构应运而生。零信任安全模型基于"从内部出发,不信任网络,不信任用户"的理念&a…

动态规划入门之01背包变形嗑药

P1802 5 倍经验日 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 嗑药固然可耻,但是能让你快速变强 --鲁迅 手动滑稽,话归正题 动态规划之背包入门01背包模板_爱莉我老婆的博客-CSDN博客 这是01背包的模板,没看的可以去看看。 我们把…

【mysql异常】Specified key was too long; max key length is 1000 bytes

最近在创建数据库的时候,报错内容如下所示: Caused by: java.sql.SQLSyntaxErrorException: Specified key was too long; max key length is 1000 bytesat com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) ~[mysql-conn…

ZooKeeper的应用场景(分布式锁、分布式队列)

7 分布式锁 分布式锁是控制分布式系统之间同步访问共享资源的一种方式。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要通过一些互斥手段来防止彼此之间的干扰,以保证一致性,…

Python“牵手”shopee商品评论数据采集方法,shopeeAPI申请指南

Shopee平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范,ShopeeAPI接口是指通过编程的方式,让开发者能够通过HTTP协议直接访问Shopee平台的数据,包括商品信息、店铺信息、物流信息等,从而实现Sh…

简单的洗牌算法

目录 前言 问题 代码展现及分析 poker类 game类 Text类 前言 洗牌算法为ArrayList具体使用的典例,可以很好的让我们快速熟系ArrayList的用法。如果你对ArrayList还不太了解除,推荐先看本博主的ArrayList的详解。 ArrayList的详解_WHabcwu的博客-CSD…