下面代码输出什么?
package
algorithms.com.guan.javajicu;
public
class
TestDemo
{
public
static
String output = ””;
public
static
void
foo(inti)
{
try
{
if
(i ==
1
)
{
throw
new
Exception();
}
}
catch
(Exception e)
{
output += “
2
”;
return
;
}
finally
{
output += “
3
”;
}
output += “
4
”;
}
public
static
void
main(String[] args)
{
foo(
0
);
foo(
1
);
System.out.println(output);
}
}
首先,finally语句必执行。
无异常,那么执行try,再finally。由于finally必执行,所以当try有跳转语句return时,会先执行finally再跳转。
有异常并抛出,则try catch finally,同样finally会在catch中的return之前执行。
输出:3423
注:return后,函数已经跳出,不会再执行
output += “
4
”; 。
下面代码输出什么?
public
static
int
func (){
try
{
return
1;
}
catch
(Exception e){
return
2;
}finally{
return
3;
}
}
答:
当try执行到跳转语句时,会先执行finally释放资源,再跳转。
输出:3