public class Demo {
public static void main(String[] args) {
System.out.println(new Demo().demo());
}
int demo(){
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
return语句执行后,会首先将返回结果放置在栈中,然后在进行返回
而finally语句执行的时机是这两步之间.
以上代码:
try中的return语句首先执行,将func1函数返回的值放置在栈中,
再执行finally中的return语句,func2函数的返回值覆盖之前栈中的值
所以,finally中的语句必定会执行,且在return与break语句后执行.