`
gcgan
  • 浏览: 38411 次
社区版块
存档分类
最新评论

纠正以前我对finally的错误理解

    博客分类:
  • java
JVM 
阅读更多

 

public static int tttt() {
	int i = 2;
	try {
		i=i/0;
		System.out.println("1:" + i);
		return i;
	} catch (Exception e) {
		i++;
		System.out.println("2:" + i);
		return i;
	} finally {
		i++;
		System.out.println("3:" + i);
	}
}

 

public static void main(String[] args) {
	System.out.println("4:" + tttt());
}

 

代码如上,会打印些什么呢?

最初玩按照以前的理解:finally在什么情况下都会执行,而执行return语句之后函数就会中断。所以我认为finally会在return之前执行。所以结果应该是:

 

2:3
3:4
4:4

 

 但是执行的结果却是:

 

2:3
3:4
4:3

 

 

怎么回事呢?跟踪执行顺序,我们会发现当遇到异常的时候会跳转到catch块里面,并且会在这里执行return,然后才会执行finally块。并且返回值不会被修改了。我修改i = i/0为i = i/1,也会得出近似的结果。

也就是说finally是在return之后被执行的。

在朋友的强调下仔细看官方的Java tutorial,发现也有执行try或者catch块而不执行finally块。这种情况是在执行try或者catch遇到了退出JVM操作或者退出线程操作。

 

最后的总结是:finally块是防止资源泄漏的重要工具,将关闭(释放)或者恢复文件或者其他资源的代码放到finally块中,可以保证这些资源被关闭(翻译的)。同时我认为:在finally块中,只适合做关闭(释放)或者恢复资源的操作,其他操作请尽量不要放到这个地方

 

0
0
分享到:
评论

相关推荐

    调试技术与异常(错误)处理

    调试是识别和纠正程序错误的过程。常见的调试方法包括: 1. **断点调试**:在代码特定位置设置断点,程序执行到该点时暂停,以便检查变量状态、调用栈等信息。 2. **单步执行**:通过逐行执行代码,观察每一步的...

    Accp6.0 S1 JAVA 理解程序逻辑 第1章

    6. **异常处理**:初步接触Java的异常处理机制,理解try-catch-finally语句块的用法,以及如何妥善处理程序运行时可能出现的错误。 7. **实例化与对象**:虽然可能不是第1章的重点,但初学者可能也会接触到对象的...

    本项目是我个人在编写Java系列博客的源代码,会持续不断更新。如果项目中的代码有错误,望大家一起勘正~。.zip

    随着博客的更新,这个项目也会不断进行迭代和改进,期待社区的参与和贡献,共同完善和纠正其中可能存在的错误。 在Java项目源码中,我们可以期待看到以下几个核心领域的知识点: 1. **基础语法**:包括变量、数据...

    高考英语短文改错解题技巧共23张PPT(共23张PPT)PPT课件.pptx

    在解题过程中,考生常遇到的问题是无法发现错误或找到错误却不知如何纠正。这可能源于基础知识不牢固,语法理解不深入,对英语和汉语表达差异的认知不足。因此,考生需要积累解题技巧,如熟悉高考短文改错的命题趋势...

    达内java易错题集

    "达内java易错题集"可能是一个专门针对学习者或开发者设计的资源,旨在帮助他们识别并纠正编程过程中常见的错误,提高编程技能和解决问题的能力。下面将详细讨论Java编程中的一些常见问题和知识点。 1. **基础语法...

    宿州市2018届高三第三次教学质量检测英语(含参考答案).doc

    可以看到学生需要识别和纠正诸如未完成动词(finish应改为finished)、介词遗漏(explain后的to)、代词误用(that应改为which)、副词误用(final应改为finally)、物主代词误用(her应为my)以及名词单复数错误...

    浅析Java异常处理机制.pdf

    大多数情况下,免检异常反映程序设计中不可重获的逻辑错误,这些都是程序中必须纠正的逻辑错误。免检异常可能在程序任何地方出现。 Java 语言为程序员提供了处理异常的方法。利用这种称为异常处理的方法,能够开发...

    Java编程习题与解答

    Java编程是一种广泛使用的高级编程语言,以其跨平台性、面向对象特性和丰富的库而...解答部分则能帮你检查理解是否正确,同时提供了一种学习新知识和纠正错误的方式。在实践中不断磨练,你将成为一名熟练的Java开发者。

    基于cortex--a8nandflash的设计与现实—-毕业论文设计.doc

    相比之下,NAND Flash更适合大容量数据存储,如文件系统和多媒体内容,它的结构更利于提高存储密度,但不支持直接执行代码,且对错误检测和纠正的要求较高。 在设计NAND Flash驱动时,需要深入理解其内部工作原理,...

    OCJP(1Z0-851)试题+讲解(本人亲测有效,稳过)

    试题涵盖了上述各个知识点,通过做题可以检验自己的理解程度,而详细的讲解则能帮助考生深入理解错误所在,及时纠正,从而提升编程技能和应试能力。考生应认真研读每个题目和答案,尤其是错误选项的解析,以便避免在...

    二维码生成示例 for delphi

    2. **选择错误纠正级别**:二维码有L、M、Q、H四个错误纠正级别,可以根据数据的重要性选择合适的级别,以确保在部分损坏的情况下仍能正确读取。 3. **构建矩阵**:根据编码后的二进制数据和错误纠正级别,生成相应...

    统考英语 翻译技巧.pdf

    理解原文的含义包括对词汇、短语和整个句子意义的把握,以及对上下文和潜在的文化背景的理解。 2. **确定句子结构**:找出句子的主、谓、宾等核心成分。这有助于构建翻译的基础框架,确保翻译后的句子保持原有的...

    【高考专题辅导】广东省2014版高考英语 专题检测卷(三十) 短文改错

    【高考专题辅导】广东省2014版高考英语 专题检测卷(三十) 短文改错 ...这些短文改错练习有助于考生提高对英语语法和句法结构的敏感度,通过纠正错误,可以增强对英语表达准确性的把握,为高考英语考试做好充分准备。

    Java解惑

    这个标题暗示了这份PDF可能包含了对Java中一些复杂或者易混淆概念的清晰解释,通过解答一些编程谜题,帮助程序员们纠正错误的认知,提高他们的编程技能。 Java是一种广泛使用的面向对象的编程语言,它的设计目标是...

    Java基础教程 (第3版).rar

    通过对照答案,学习者可以检验自己的理解程度,找出不足之处,并及时纠正错误,加深对知识的理解。 其次,案例源文件《Java基础教程(第3版)案例源文件.rar》包含了大量的编程实例,这些实例不仅涵盖了基本语法,...

    程序设计基础第二版董付国课后习题课后习题.zip

    4. **异常处理**:理解try/except/finally结构,如何捕获并处理运行时错误,以及异常的类型和使用。 5. **文件操作**:了解如何打开、读取、写入和关闭文件,理解文件对象的方法,以及文件路径和模式的相关知识。 ...

    Java语言程序设计张思民(第四版) 课后答案

    课后答案是学习过程中非常重要的参考资料,它能够帮助读者检查自己的理解是否准确,及时发现并纠正错误。这些文档以Word格式提供的习题解答,包括了第七年至第九年间四次印刷的更新内容,确保了答案的时效性和准确性...

    二级java南开100+答案

    【标题】"二级Java南开100+答案"指的是针对南开大学计算机等级考试二级Java科目的模拟试题集,其中包含超过100道题目以及...同时,答案的存在能帮助考生即时纠正错误,深化对知识的理解,为顺利通过考试打下坚实基础。

    java二级全国计算机等级考试历年多卷笔试试题及答案

    Java二级全国计算机等级考试是针对...同时,对每一道试题进行深入理解和分析,找出错误并及时纠正,是提高成绩的关键。此外,理论学习与实践编程相结合,通过编写小程序来巩固所学知识,也是提升编程能力的有效方式。

Global site tag (gtag.js) - Google Analytics