public class TestChar {
private static void foo() {
try {
System.out.println("try");
foo();
} catch (Throwable e) {
System.out.println("catch");
foo();
} finally {
System.out.println("finally");
foo();
}
}
public static void main(String[] args) {
foo();
}
}
输出结果是n个try+2个finally不断循环,n的范围一般是2~5不懂,求解

解决方案 »

  1.   

    在别的地方看到这么一道题,发现自己对finally理解好像有点错误,上面的程序每循环一次finally就执行了两次,搞不懂
      

  2.   

    你写这个例子是想要知道什么啊?
    try  catch  finally 的执行顺序吗?
    你这例子递归啦!
      

  3.   

    我的理解是这样的
    首先你应该明白try catch与finally的关系,如果try里没有异常或者有异常但是被catch捕获到,那么catch后的普通语句是可以正常运行的,如果try里边有异常但是catch块没有捕获到,那么catch后的普通语句是不会执行的,这时候如果有必须要去执行的语句,那么执行finally后语句。
      

  4.   

    刚才debug了下发现一直是try,没有finally,于是我自己另外写了个测试的,每递归一次睡眠10个毫秒,一直在输出try,等了一分钟左右,开始输出finally了,我想应该是栈溢出了。
    不过输出类似于这样,finally被执行两次,还是有点不解
    try
    try
    tryfinallyfinally
    tryfinallyfinally
    try
    tryfinallyfinally
    tryfinallyfinally
    try
    try
    tryfinallyfinally
    tryfinallyfinally
    try
    tryfinallyfinally
    tryfinallyfinally
    try
    try
      

  5.   

    原题是选择题:
    A.执行一段时间后报栈溢出。   
    B.会一直输出“try”。    
    C.会一直输出“try”和“finally”。    
    D.会一直输出“try”、“catch”和“finally”