关于Java面试中容易犯错的try{} catch{} finally{}组合

还是前天去面试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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值