finally块里的代码是什么时候被执行的?

一个dummy method:

public String bar() throws Exception{
try{
System.out.println("In try");
return "";
}finally{
System.out.println("In finally");
}
}

今天有人问我:如果调用bar()这个方法,那么finally里面的代码是在什么时候被执行的?

我回答不出,惭愧...,写了2年多的Java代码,竟然回答不了这样基础的问题。
请大家帮忙解释一下finally的机制是怎样的

在return语句之前被执行。其实不管有没有try或者catch,finally都一定会被执行,所以在finally里面使用的变量必须在try之前被定义。

按照robbin所说的,再写了段代码跑了一下,这下理解了。不知道作为一个面试题目考别人的话怎么样?


/*
* Created on 2003-8-25
*/
package com.smics.trash;

/**
* @author Quake Wang
*/

public class TestFinally {

public static String bar() {
try{
System.out.println(
"In a try");
throw new Exception();
}catch(Exception e){
System.out.println(
"In a exception");
return
"a";
}finally{
System.out.println(
"In a finally");
try{
System.out.println(
"In b try");
return
"b";
}finally{
System.out.println(
"In b finally");
}
}
}

public static void main(String[] args) {
System.out.println(TestFinally.bar());
}
}

呵呵,这基本上是英文问题啊。如果按英文意思猜,应该能猜个89不离10