还是前天去面试java中的一道面试题,说真的,这个题目前几天好像好看到过,没想到面试的时候还是打错了。
题目是这样的
class FaceDemo06{
public static int fun()
{
int result = 5;
try {
result = result / 0;
return result;
}
catch (Exception e)
{
System.out.println("Exception");
result = -1;
return result; }
finally {
result = 10;
System.out.println("i am in finally");
}
}
public static void main(String[] args)
{
int x=fun();
System.out.println(x);
}
}
问最后输出的结果是什么。
对题目进行分析,首先找到程序入口main()函数。
可以看到,我们只需要知道x的值就可以结题了。要想知道x的值,按照程序运行的顺序,是跳转到fun()函数。
在fun函数中的try语句很明显出现了除0异常,这个是后要抛出异常,执行catch语句。
此时,执行catch语句后,输出的内容应该是:Exception,然后返回-1给x。但是我们知道这个组合的finally语句是无论如何都会执行的。此时又得到一个返回值10,并输出内容:i am in finally。
那么问题来了,最后x的值到底是-1还是10呢。
重新回到catch语句,我们发现已经 return -1 了 。这说明,在main()函数中的x已经得到了一个值-1。此时main()函数按照顺序应该往下执行了,所以又得到了输出内容:-1。
最后的结果就是:
Exception
i am in finally
-1