码上风云

记录精彩的程序人生

  menu
24 文章
0 浏览
1 当前访客
ღゝ◡╹)ノ❤️

三道try-catch-finally题目,面试妥妥的

鼓励读者先自行思考,然后再看答案。所以,我先进行试题分析,最后给出答案。

  • 第一题
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);
    }
}

分析:
1.执行 foo(0)时,不满足 try 语句块中的 if 语句,所以不会抛出异常,执行 finally 语句。output=“34”
2.执行 foo(1)时,满足 try 中的 If 语句,抛出异常,在 catch 中进行异常处理,虽然有 return 语句,但是 finally 中的内容必须执行,也就是说要先执行了 finally 才进行 return 操作,return 后 output += “4”将不会再执行。所以output="23".

正确答案:3423
  • 第二题
public class Test {
public static void main(String[] args) {
	System.out.println(test());
}
private static int test() {
int temp = 1;
try {
System.out.println(temp);
return ++temp;
} catch (Exception e) {
System.out.println(temp);
return ++temp;
} finally {
++temp;
System.out.println(temp);
}
}
}

分析:
1.进入try的时候temp=1,然后return,temp=2,值保存在临时空间中。
2.由于try中无异常,有return,但是finally必须执行,这样temp=3,并输出。
3.执行return temp=2,finally返回的值不会影响try返回的结果。但是,如果 finally 中有 return,会直接返回,不再执行try,catch中的return

答案:1,3,2
  • 第三题
public class TryCatch2 {
    public static void main(String[] args) {
        System.out.println(getInt4());
    }
 public static int getInt4(){
        int a = 0;
        try {
            a++;
            throw new Exception("故意的");
        }
        catch (Exception exa) {
            a++;
            return a;
        }
        finally{
            a++;
            System.out.println(a);
            return a;
        }
    }
}

分析:
1.执行try代码块,a=1,然后进入异常
2.执行catch代码块,a=2,然后return的时候把a=2放入临时空间。
3.执行finally,a=3,并输出。再执行finally的return a=3,不会执行catch中的return。

答案:3,3

总结下:
1.不管有没有异常,finally代码必会执行。
2.try中或catch中有无return,finally也会执行。执行顺序是:先执行try,catch,遇到return先保存值到临时空间中,再执行finally,不论finally如何操作这个值,都不影响临时空间的值。finally执行完以后再返回临时空间的值。
3.finally中有return,程序会提前结束,不再执行try,catch中的return。


think twice, code once