解析Java finally
2024-09-04 07:03:55
以下用几个简单的例子介绍一下finally的用法:
例子1
public class Test { public static void main(String[] args) { System.out.println("return value of test(): " + test()); } public static int test() { int i = 1; try { System.out.println("exec try block"); return i; } finally { System.out.println("exec finally block"); } } }
执行结果:
exec try block exec finally block return value of test(): 1
即使try中执行了return,finally依然会执行。如果以上的return i; 替换为System.exit(0); 则finally不会执行,因为虚拟机已经停止了。
例子2
public static int getValue() { try { return 0; } finally { return 1; } }
以上函数执行返回1。
例子3
public static int getValue() { int i = 1; try { return i; } finally { i++; } }
函数返回1。对于try或者catch中的return、throw,这两个控制转义指令(return、throw、break 和 continue 都是控制转移语句)返回的变量会被保存到“本地变量表”中,等finally执行完成后,再将之前保存下来的值通过return、throw将值返回到调用者处。以下再看一个类似的例子:
例子4
public static String test() { try { System.out.println("try block"); return test1(); } finally { System.out.println("finally block"); } } public static String test1() { System.out.println("return statement"); return "after return"; }
执行结果
try block return statement finally block
可见,return语句会先执行,但没有马上返回,这时返回值已经确定下来了(保存到了本地变量表中),接着执行finally,最后再返回。【对throw同理】
最新文章
- git: fatal: Not a git repository (or any of the parent directories): .git
- 过滤emoji表情
- Visual Studio 2010 起始页中 不显示最近使用的项目问题,解决办法
- My Game --线段数据
- 我的常用mixin 之 lines
- “耐撕”团队2016.04.12站立会议
- 深度剖析JDK动态代理机制
- ERP小金刚Pro专业大比拼: Dynamics,NetSuite和Odoo
- Solr 06 - Solr中配置使用IK分词器 (配置schema.xml)
- 初读";Thinking in Java";读书笔记之第九章 --- 接口
- Detected problems with API compatibility(visit g.co/dev/appcompat for more info)
- WPF Chart
- DATAPUMP进程查询
- C# Asp.net中xml串与对象互相转换
- sap hana 数据库 EBS
- C#并口热敏小票打印机打印位图包括芯片的写入
- Unity3D——SendMessage方法的使用
- Techniques for HA IT Management
- 《ABCNN: Attention-Based Convolutional Neural Network for Modeling Sentence Pairs》
- oracle 11g Enterprise Manager配置失败