关于try、catch、finally的执行顺序

访客4年前关于黑客接单418

先来看牛客上的一道题

public class TestDemo { 
    public static String output =""; 
    public static void foo(int i){ 
       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);
    } 
}


当执行foo(0)时,首先进入try块,不满足,继而进入finally,最后执行try-catch-finally外部的代码,以是output变为“34”,
然后是foo(1),进入try块,try中抛出异常,有匹配的catch语句,则catch语句捕捉,然后,由于catch中有return语句,则return要在finally执行后再执行;try-catch-finally之外的代码就不再执行了(由于有return打断),以是最终output的值为“3423”
若是这个例子中的catch语句没有return,那么输出的效果就应该是“34234”.
今后例可以看出亮点:
1、try中没有抛出异常,则catch语句不执行,若是有finally语句,则接着执行finally语句,继而接着执行finally之后的语句;
2.不管是否try...catch,finally都市被执行。当try...catch中有return的话,finally后会执行try...catch中的return,然后不再执行后续语句。也就是说finally字句中的语句总会执行,纵然有return语句,也是在return之前执行。
3、另有一点:finally前有return、finally块中也有return,先执行前面的return,保留下来,再执行finally的return,笼罩之前的效果,并返回。

再一个例子

public class Test
{
    public static int aMethod(int i)throws Exception
    {
        try{
            return i / 10;
        }
        catch (Exception ex)
        {
            throw new Exception("exception in a Method");
        } finally{
            System.out.printf("finally");
        }
    }
 
    public static void main(String [] args)
    {
        try
        {
            aMethod(0);
        }
        catch (Exception ex)
        {
            System.out.printf("exception in main");
        }
        System.out.printf("finished");
    }
}


此题输出效果为 finally finished
若是将aMethod中的i/10换成10/i,则输出效果为 finally exception in main finished


思源资源网:分类流动

1.阿里云: 本站现在使用的是阿里云主机,平安/可靠/稳固。点击领取2000米代金券、领会最新阿里云产物的种种优惠流动点击进入

相关文章

一体机玩游戏怎么样?都说好用

一体机玩游戏怎么样?都说好用

电脑整机制造一直没有新鲜血液流入,沉闷的市场几乎没有任何可评测的新东西出来,特别是超薄一体机方面,较高的技术门槛导致这个领域被巨头们全部垄断,高价低配的东西充斥着整个市场,至于高价高配的东西嘛,那个运...

黑客帝国守护天使是谁(黑客帝国下凡天使)

黑客帝国守护天使是谁(黑客帝国下凡天使)

本文导读目录: 1、黑客帝国1,2,3的剧情详细介绍! 2、黑客帝国守护天使是谁演的 3、黑客帝国中守护天使和制钥人是谁演的 4、关于黑客帝国 5、黑客帝国,守护天使和双子病毒谁厉害?...

为什么还不能预判疫情拐点怎么回事 疫情拐点大概什么时候出现

【#全国非湖北地区确诊病例连降两日#,#为什么还不能预判疫情拐点#?】王辰院士:拐点指的是人数先持平然后迅速下降,最后归于常态或消除疾病的转折点。现在难以判断拐点的原因是①疫情的底数不甚清楚,判断根据...

光大银行泄漏水池私人信息由谁来维护

光大银行泄漏水池信息内容:私人信息由谁来维护,以前造成的数据信息泄露事务管理,通常与金融机构“里边人员”有关。从案例经济管理的视...

赞,一边防控新肺炎,一边收治大脑炎

赞,一边防控新肺炎,一边收治大脑炎

郁闷了这许久,今天,终于得到两个好消息,振奋人心,赞,赞,赞。 好消息一,武汉前线,美国 “积了德”(Gilead)公司的药物“人民的希望”(Remdesivir),貌似真没辜负人民的希望,基于...

在黑客帝国中谁是电脑人物(黑客帝国里的中国人是谁)

在黑客帝国中谁是电脑人物(黑客帝国里的中国人是谁)

本文导读目录: 1、黑客帝国影片里的人物都代表的是计算机里的哪个部件(人物背景) 2、黑客帝国 3、《黑客帝国》中的尼奥一名由何而来 4、《黑客帝国》中尼欧到底是人类还是电脑程式 5、...