首页 > 其他分享 >try-catch VS try-catch-finally

try-catch VS try-catch-finally

时间:2024-06-06 16:46:31浏览次数:27  
标签:BufferedWriter try finally catch new 异常

try-catch 和 try-catch-finally 是Java中用于异常处理的两种基本结构,它们的主要区别在于资源管理和流程控制上。

  • try-catch
  1. 功能:主要用于捕获并处理代码块中可能发生的异常。当try块中的代码执行时遇到异常,对应的catch块将被执行,处理异常。

  2. 特点:如果try块没有抛出任何异常,则catch块不会执行。适合于只需要捕获并处理异常,而不需要关注资源释放或最终操作的场景。

  • try-catch-finally
  1. 功能:除了具有try-catch的功能外,还增加了一个finally块。无论try块是否发生异常,也不管是否有匹配的catch块处理了异常,finally块总会被执行(除非程序提前退出如系统崩溃)。

  2. 特点:

资源清理:非常适合用来关闭在try块中打开的资源,如文件流、数据库连接等,确保资源被正确释放。

最终操作:可以执行一些无论是否发生异常都需要进行的操作。

异常覆盖:如果finally块也抛出了异常,并且try或catch块已经处理了一个异常,那么原始异常会被finally块中抛出的异常覆盖(除非使用特殊技巧保留原始异常信息)。

  • try-with-resources (Java 7+)
    另外,从Java 7开始引入了try-with-resources语句,它进一步简化了资源管理,自动关闭实现了AutoCloseable接口的资源,结合了try-catch-finally的优点,但语法更简洁:

在 try-with-resources 语句中,圆括号 () 里应该写入需要自动关闭的资源声明和初始化。这些资源必须实现 AutoCloseable 接口(或者其子接口 Closeable)。典型的例子包括文件输入输出流 (FileInputStream, FileOutputStream)、缓冲读写器 (BufferedReader, BufferedWriter)、数据库连接 (Connection) 等。
例如:

try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
     BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
    // 在这里安全地使用 reader 和 writer
    // 读写操作...
} catch (IOException e) {
    // 处理可能发生的 IOException 异常
    e.printStackTrace();
}


在这个例子中,BufferedReader 和 BufferedWriter 都是在 try 的圆括号中声明和初始化的。当 try 代码块执行完毕(无论是正常结束还是因异常退出),这两个资源会自动被关闭,因为它们实现了 AutoCloseable 接口。这样就无需在 finally 块中手动关闭它们了。

标签:BufferedWriter,try,finally,catch,new,异常
From: https://www.cnblogs.com/itcq1024/p/18235573

相关文章

  • Body AdvancedBrep Geometry
    BodyAdvancedBrepGeometryBodyBrepGeometry是通过边界表示模型(包括NURBS)表示产品的三维形状。应使用保持该几何表示的IfcShapeResentation的以下属性值:IfcShapeRepresentation.RepresentationIdentifier ='Body'IfcShapeRepresentation.RepresentationType ='Advanced......
  • .NET 中使用 OpenTelemetry Traces 追踪应用程序
    上一次我们讲了OpenTelemetryLogs。今天继续来说说OpenTelemetryTraces。在今天的微服务和云原生环境中,理解和监控系统的行为变得越来越重要。在当下我们实现一个功能可能需要调用了N个方法,涉及到N个服务。方法之间的调用如蜘蛛网一样。分布式追踪这个时候就至关重要。它......
  • MySQL数据库:Lock wait timeout exceeded; try restarting transaction问题解析及解决方
    MySQL数据库:Lockwaittimeoutexceeded;tryrestartingtransaction问题解析及解决方案一、背景描述二、原因分析三、解决方案3.1方案一事务信息查询3.2方案二如果杀掉线程依然不能解决,可以查找执行线程耗时比较久的任务,kill掉3.3方案三innodb_lock_wait_timeout锁定等......
  • Body Brep Geometry
    BodyBrepGeometryBodyBrepGeometry是通过分面边界表示模型来表示产品的3D形状。应使用保持该几何表示的IfcShapeResentation的以下属性值:IfcShapeRepresentation.RepresentationIdentifier ='Body'IfcShapeRepresentation.RepresentationType ='Brep'IfcShapeReprese......
  • OpenTelemetry agent 对 Spring Boot 应用的影响:一次 SPI 失效的案例
    背景前段时间公司领导让我排查一个关于在JDK21环境中使用SpringBoot配合一个JDK18新增的一个SPI(java.net.spi.InetAddressResolverProvider)不生效的问题。但这个不生效的前置条件有点多:JDK的版本得在18+SpringBoot3.x还在额外再配合使用-javaagent:openteleme......
  • error: no configuration has been provided, try setting KUBERNETES_MASTER environ
    1:问题kubernetes集群,一台master,一台node1,一台node2,重启电脑后,node1节点和node2节点报错如下error:noconfigurationhasbeenprovided,trysettingKUBERNETES_MASTERenvironmentvariable2:解决方法2.1:查看master节点进入到该目录下cd/etc/kubernetes把admi......
  • JavaScript执行(四):try里面放return,finally还会执行吗?
    在前面几篇文章中,我们已经了解了关于执行上下文、作用域、闭包之间的关系。今天,我们则要说一说更为细节的部分:语句。语句是任何编程语言的基础结构,与JavaScript对象一样,JavaScript语句同样具有“看起来很像其它语言,但是其实一点都不一样”的特点。我们比较常见的语句包括......
  • Python新建Poetry 环境
    1、安装Poetry:如果您还没有安装Poetry,可以通过以下命令安装它:(Invoke-WebRequest-Urihttps://install.python-poetry.org-UseBasicParsing).Content|python-指定虚拟环境存放目录poetryconfigvirtualenvs.pathD:\WorkSpace\Venv2、创建新的Poetry项目:安装Po......
  • CMD 与 ENTRYPOINT 区别
     CMD命令演示编写Dockerfile[root@saildockerfile]#vimDockerfile-cmd-test[root@saildockerfile]#catDockerfile-cmd-testFROMcentosCMD["ls","-a"] 构建镜像[root@localhosthome]#dockerbuild-fdockerfile-cmd-test-tcmd.[+]Bui......
  • request to https://registry.npm.taobao.org/cnpm failed, reason: certificate has
    换华为的,否则会出问题:cnpmconfgsetregistryhttps://mirrors.huaweicloud.com/repository/npm/npmERR!codeCERT_HAS_EXPIREDnpmERR!errnoCERT_HAS_EXPIREDnpmERR!requesttohttps://registry.npm.taobao.org/cnpmfailed,reason:certificatehasexpirednpmER......