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块中,只适合做关闭(释放)或者恢复资源的操作,其他操作请尽量不要放到这个地方
分享到:
相关推荐
Java的 try 与 catch finally关键字的使用
try-catch-finally捕获异常try-catch-finally捕获异常
finally 也是一个关键字,不过我们可以使用 finally 和其他关键字结合做一些组合操作; finalize 是一个不让人待见的方法,它是对象祖宗 Object 中的一个方法,finalize 机制现在已经不推荐使用了。本篇文章,cxuan ...
Java语言finally语句详解,finally到底是在return之前还是之后执行.zip
try-finally语句是Microsoft对C和C++语言的扩展,它能使32位的目标程序在异常出现时,有效保证一些资源能够被及时清除,这些资源的清除任务可以包括例如内存的释放,文件的关闭,文件句柄的释放等等。try-finally...
final, finally, finalize的区别
简述finally关键字的特点和作用
17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句...
finally语句块与return的执行关系
lua 错误 Lua 的强大错误处理功能,其特点是: try() , catch() , finally()函数 自定义错误对象 快的 -- import creates a base Error class and global funcs try(), catch(), finally() local Error = require ...
一,谈谈final, finally, finalize的区别。 java面试题
主要帮助大家理解javascript中try...catch...finally,从浅入深,一步步掌握javascript中try...catch...finally的使用方法,感兴趣的小伙伴们可以参考一下
使用try-catch-finally处理异常
Java中final,finally,finalize三个关键字的区别_动力节点Java学院整理
NULL 博文链接:https://codecook.iteye.com/blog/731972
try-catch-finally.js 843字节库,可在JavaScript中更灵活地捕获错误。内容注意事项按名称捕获可能不起作用按类型捕获在跨框架/过程中不起作用错误被消耗测验 安装 浏览器< script src =" try-catch-finally.js ...
异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制。 本文为你解释怎样处理C++的异常处理。提供了大量的code
而另外一种,是在程序运行过程中出现的错误,诸如NameError,TypeError等此类错误,有错误名称和行号以及报错内容的错误,称之为异常。 二、异常处理的基本方法: try: error_statement except [(ExceptionName1,...
与其他语言的模型相比,finally 关键字是对 Java 异常处理模型的最佳补充。接下来通过本文给大家介绍Java中Finally关键字及finally关键字的使用相关知识,感兴趣的朋友一起学习吧
移动通信原理finally.ppt