题目:try{}里有一个return 语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候执行,在return前还是return后?
多谢各位!
多谢各位!
解决方案 »
- 谁能帮我解释一下这个递归方法
- java是编译型的还是解释型的
- Java面试题每日五题(2010/03/01)及(2010/02/26)答案
- javaweb转iphone开发,iphone开发有前途吗?
- 菜鸟求教 JScrollPane.setVisible 怎么玩, 为啥false没问题, 但true没反映??
- 救命呀!!!Java中是否可以用索引?在线等哈
- 简单问题求救!用JBuilder9打包exe文件时遇到的问题,详细请进!
- 我现在有long val=123;但要显示成00000123如何办?就是格式化的问题,用0填葱
- 初学java,在一个问题请大家帮忙解决!
- 谁能告知UCS-2的中文对照码表?50分相送!
- MVC怎么样去理解,唉每一次知道MVC影响着程序编程的质量。
- java 怎样读取doc xls文件创建和修改时间。
执行顺便在return前
问题已经解决了,可以结帖给分啦
public static void main(String[] args)
{
System.out.println(test());
}
public static int test()
{
try
{
System.out.println(2/1);
return 0;
} catch (Exception e)
{
e.printStackTrace();
}finally
{
System.out.println("2/0");
}
return 0;
}
结果:
2
2/0
0
然后执行 finally里面的输出
最后才返回的
如果 try 和 finally 里都有 return 的话,那么只会执行 finally 里的 return,不会再去执行 try 里的 return 了。如:
public static boolean tryFinallyTest(){
try{
System.out.println("a");
return false;
}finally{
System.out.println("b");
return true;
}
}
那么,返回的会是
a
b
tryFinallyTest= true
2. 先运算try里面的return后边跟的表达式(例如exp1),然后执行finally块,最后返回exp1得到的值。
3. 如果exp1抛出异常,运行相应的catch,然后finally。
4. 如果exp1抛出异常,又没有相应的catch,那么finally,最后继续抛出异常。可以自行写例子测试。
哈哈,上面的同志全部要喷饭吧!!!!
这个是最佳答案大家注意第二条,下面的代码似乎返回1,不是2
int a=0;
try{
a=1;
return a;
}
finally{
a = 2;
}一般,return编译成及其语言会有2个操作,将返回值压入堆栈,然后跳回到调用函数的代码去执行(修改cs寄存器?).(这点学过汇编的同学应该比较清楚)finally里的代码是这个时候执行,压栈之后,跳回之前。在return之前或之后这2种说法都是错误的