try-catch
是 Java 和许多其他编程语言中用于异常处理的关键字组合,它允许程序员优雅地捕获和处理运行时可能出现的错误。以下是 try-catch
结构的详细说明:
try {
// 有可能抛出异常的代码块
// 这里可以调用方法、执行操作等
riskyOperation();
} catch (SpecificExceptionType1 e) {
// 处理 SpecificExceptionType1 类型异常的代码块
// 可以访问到异常对象 e,通过 e.getMessage(), e.printStackTrace() 等方法获取异常信息
System.out.println("Caught Exception Type 1: " + e.getMessage());
} catch (SpecificExceptionType2 e) {
// 处理 SpecificExceptionType2 类型异常的代码块
System.out.println("Caught Exception Type 2: " + e.getMessage());
} finally {
// 无论是否发生异常,都会执行的代码块
// 通常用于资源清理,如关闭文件、数据库连接等
cleanupResources();
}
try
块:包裹可能会抛出异常的代码。当 try
块中的代码执行时,如果出现了异常(例如除数为零、文件未找到等),控制权将立即转到相应的 catch
块。
catch
块:每一个 catch
块都与一个或一类异常类型相关联。当 try
块中的代码抛出与 catch
块声明的异常类型相匹配的异常时,与之关联的 catch
块将被执行。在 catch
块中,可以访问到异常对象,进而获取异常的详细信息。
finally
块(可选):无论 try
块中是否抛出了异常,以及是否有与之匹配的 catch
块,finally
块中的代码总会被执行。通常用于资源回收、关闭打开的文件、数据库连接等操作,确保无论程序运行结果如何,都能正确释放资源。
try {
int denominator = 0;
int result = 10 / denominator; // 这将抛出 ArithmeticException
} catch (ArithmeticException e) {
System.out.println("Divide by zero error occurred: " + e.getMessage());
} finally {
System.out.println("Finally block executed.");
}
在这个例子中,尝试除以零会抛出 ArithmeticException
,这个异常会被相应的 catch
块捕获并处理,然后执行 finally
块中的代码。
在Java中,可以使用多重 catch
子句来捕获不同类型的异常。这样,可以根据异常的不同类型执行不同的处理逻辑。下面是一个使用多重 catch
的示例:
try {
// 可能抛出多种类型异常的代码
File file = new File("non_existent_file.txt");
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line = br.readLine();
} catch (FileNotFoundException e) {
// 处理找不到文件异常
System.out.println("File not found: " + e.getMessage());
} catch (IOException e) {
// 处理读取文件时发生的其他IO异常,如读取错误、缓冲区溢出等
System.out.println("An IO error occurred: " + e.getMessage());
} finally {
// 清理资源,如关闭文件流
try {
if (br != null) {
br.close();
}
} catch (IOException ex) {
System.out.println("Error closing the reader: " + ex.getMessage());
}
}
在上述代码中,try
块中包含了可能导致 FileNotFoundException
和 IOException
的代码。当出现 FileNotFoundException
时,第一个 catch
子句会被执行;如果发生了 IOException
但不是 FileNotFoundException
(例如读取过程中出现问题),则第二个 catch
子句会被执行。
需要注意的是,Java 7及更高版本引入了一种更简洁的异常处理方式,即使用一个多异常捕获的 catch
子句,可以捕获并处理多种类型的异常,如下所示:
catch (FileNotFoundException | IOException e) {
System.out.println("An error occurred: " + e.getMessage());
}
这种方式可以合并处理同类或继承关系中的多种异常类型。但是,如果需要针对每种异常采取不同的处理措施,还是需要分开使用多个 catch
子句。
文章浏览阅读75次。作者 |杨智钦单位 |北京航空航天大学来源|将门创投在本文中,我们提出了一种新的即插即用的联邦学习模块,FedFed,其能够以特征蒸馏的方式来解决联邦场景下的数据异构问题。FedFed首次探索了对数据中部分特征的提取与分享,大量的实验显示,FedFed能够显著地提升联邦学习在异构数据场景下的性能和收敛速度。论文标题:FedFed: Feature Distillation against..._about [neurips 2023] "fedfed: feature distillation against data heterogeneit
文章浏览阅读3k次,点赞2次,收藏3次。《Ray Tracing in One Weekend》目录 第一部分:学习总结问题二:用C++输出第一张图片 第二部分:原文截图《Ray Tracing in One Weekend》目录_c++如何输出图片
文章浏览阅读8k次,点赞7次,收藏9次。spring-cloud-kubernetes-config是spring-cloud-kubernetes框架下的一个库,用于将kubernetes的configmap作为配置文件,提供给springboot应用_spring-cloud-starter-kubernetes-config maven
文章浏览阅读307次。传送门题意: n个有高度的点和m条边,边只能从高点到低点走,求最小树形图??题解: 最小生成树。 朱刘算法求最小树形图只能得70分,考虑更高效的算法。首先对图分层,发现低层节点对高层答案没有影响,考虑先处理高层的边。现在假设已经处理了高层的所有边,对于本层的边,其实就是一颗最小生成树。因为高层连向本层的边看做双向边没有任何影响。那么直接把边按照层数排序,第二关键字用权值排序即可。#includ
文章浏览阅读1.3k次。python GUI开发中PySide2、PySide6及PyQt间区别,python版本要求,官方文档支持等_pyside
文章浏览阅读3.3k次,点赞4次,收藏19次。Hough变换思想(参数空间变换):在原始图像坐标系下的一个点对应了参数坐标系中的一条直线,同样参数坐标系的一条直线对应了原始坐标系下的一个点,然后,原始坐标系下呈现直线的所有点,它们的斜率和截距是相同的,所以它们在参数坐标系下对应于同一个点。这样在将原始坐标系下的各个点投影到参数坐标系下之后,看参数坐标系下有没有聚集点,这样的聚集点就对应了原始坐标系下的直线。在实际应用中,y=kx+b形式..._opencv python hough_multi_scale
文章浏览阅读10w+次,点赞565次,收藏2.9k次。vs2019安装和使用教程(详细)_vs2019
文章浏览阅读2.5k次,点赞2次,收藏2次。《JAVA程序设计》作业一、选择题编译HelloWorld.java的正确命令是:java HelloWorld.class B)java HelloWorld.java C)javac HelloWorld.java正确运行HelloWorld.java的正确命令是:java HelloWorld B)javac HelloWorld.java C)javac HelloWorld.class下面程序代码,使用多行注释正确的是:A) // int k=9;// int j=8_which of the following are correct? _____ a. string[] list = new string{
文章浏览阅读812次。注:本文转自赛灵思中文社区论坛,源文链接在此。本文原作者为XILINX工程师。以下为个人译文,仅供参考,如有疏漏之处,还请不吝赐教。本篇博文提供了一份视频列表,用于展示 (UG1209) 中的教程。这些视频是使用 Vivado Design Suite 2019.1 版和赛灵思软件开发套件 (SDK) 创建的。其中所含示例均为针对 Zynq UltraScale+ MPSoC ZCU102 Rev1 评估板的示例。视频 1 演示了如何使用 ZCU102 评估板来运行应用。虽然大部分视频都使_zynq ultrascale+ mpsoc 嵌入式设计方法指南
文章浏览阅读284次。拉格朗日插值法_y_j_gi
文章浏览阅读263次。_hfile.format.version
文章浏览阅读896次。本栏目(Algorithms)下MIT算法导论专题是个人对网易公开课MIT算法导论的学习心得与笔记。所有内容均来自MIT公开课Introduction to Algorithms中Charles E. Leiserson和Erik Demaine老师的讲解。(http://v.163.com/special/opencourse/algorithms.html)第五节-------线性时间_linear time sorting