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

03-08-25 wys1978
一个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的机制是怎样的

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

wys1978
2003-08-25 17:57
按照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());
    }
}
<p>

raynix
2003-08-26 09:42
呵呵,这基本上是英文问题啊。如果按英文意思猜,应该能猜个89不离10

猜你喜欢