关于try,finally执行顺序的分析
来源:互联网 发布:手机看视频免广告 知乎 编辑:程序博客网 时间:2024/06/11 01:51
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- public class test {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- System.out.println(new test().test());;
- }
- static int test()
- {
- int x = 1;
- try
- {
- return x;
- }
- finally
- {
- ++x;
- System.out.println(x);
- System.out.println("aaa");
- }
- }
- }
输出结果为:
2
aaa
1
主函数调用子函数并得到结果的过程,好比主函数准备一个空罐子,当子函数要返回结果时,先把结果放在罐子里,然后再将程序逻辑返回到主函数。所谓返回,就是子函数说,我不运行了,你主函数继续运行吧,这没什么结果可言,结果是在说这话之前放进罐子里的。
public class smallT
{
public static void main(String args[])
{
smallT t = new smallT();
int b = t.get();
System.out.println(b);
}
public int get()
{
try
{
return 1 ;
}
finally
{
return 2 ;
}
}
}
返回的结果是2。
我可以通过下面一个例子程序来帮助我解释这个答案,从下面例子的运行结果中可以发现,try中的return语句调用的函数先于finally中调用的函数执行,也就是说return语句先执行,finally语句后执行,所以,返回的结果是2。Return并不是让函数马上返回,而是return语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行finally语句后才真正开始返回。
在讲解答案时可以用下面的程序来帮助分析:
public class Test {
/**
*@paramargsaddbyzxx,Dec9,2008
*/
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
System.out.println(new Test().test());;
}
int test()
{
try
{
return func1();
}
finally
{
return func2();
}
}
int func1()
{
System.out.println("func1");
return 1;
}
int func2()
{
System.out.println("func2");
return 2;
}
}
-----------执行结果-----------------
func1
func2
2
结论:finally中的代码比return 和break语句后执行
- 关于try,finally执行顺序的分析
- try{} finally{} 中 finally的执行顺序
- 关于Java中try finally return语句的执行顺序分析
- 关于Java中try finally return语句的执行顺序分析
- 关于java中try catch finally的执行顺序
- 关于try\return\finally的执行顺序问题
- 一道关于try,finally执行顺序的面试题
- 关于Java中try-catch-finally-return的执行顺序
- 关于Java中try-catch-finally-return的执行顺序
- 关于try-catch-finally-return语句的执行顺序
- 关于Java中try-catch-finally-return的执行顺序
- 关于try、catch、finally中return的执行顺序
- try finally执行顺序
- try, catch, finally, return的执行顺序
- try、catch、finally、return的执行顺序
- try、catch、finally、return的执行顺序
- try catch finally return 的执行顺序
- try、catch、finally、return的执行顺序
- jquery实现input输入框实时输入触发事件
- IOS7隐藏状态栏
- The connection to adb is down, and a severe error has occured.
- HTTP状态码大全
- 我的日志记录函数
- 关于try,finally执行顺序的分析
- Windows环境中同时安装Oracle9i 10g和11g
- php查询mysql表中所有字段详细信息
- 岁月是把杀猪刀
- C语言修改文件中一部分内容
- 程序员需要有多懒 ?- cocos2d-x 数学函数、常用宏粗整理(3.0以前版本)
- 从MySQL中获得数据表auto_increment值(基数)的方法
- 译《Understanding Weak References》
- 用位运算符异或实现简单的加密