<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          懵逼了,try和finally中都有return

          共 2419字,需瀏覽 5分鐘

           ·

          2020-09-06 15:33

          點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

          優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

          66套java從入門到精通實(shí)戰(zhàn)課程分享?

          關(guān)于try{return}finally{return},這類的問題,面試中很常見,而且有時(shí)候現(xiàn)實(shí)碼代碼中也會(huì)碰到,所以乘著今天不是很忙的情況下,我無意中想起了自己還不是非常清楚的try...return和finally...return,看了無數(shù)遍理論知識(shí)不如自己測試來的實(shí)在,

          首先復(fù)習(xí)已有的知識(shí)知道:return 是可以當(dāng)作終止語句來用的,我們經(jīng)常用它來跳出當(dāng)前方法,并返回一個(gè)值給調(diào)用方法。然后該方法就結(jié)束了,不會(huì)執(zhí)行return下面的語句。finally :無論try語句發(fā)生了什么,無論拋出異常還是正常執(zhí)行。finally語句都會(huì)執(zhí)行。

          然后測試效果如下。

          初級(jí)版測試


          首先呢,這兩個(gè)地方必須得有一個(gè)return,否則編譯都通不過,如果有人給你的是上面截圖這種的,你可以很自信的告訴他,對(duì)不起,你的代碼編譯都通不過。

          1、在finally中放return

          猜想:這種情況很簡單,因?yàn)閒inally語句塊里有了return,那么一定返回的是finally中的str,所以運(yùn)行結(jié)果應(yīng)該是ccc

          運(yùn)行結(jié)果:


          所以猜想正確。

          2、在finally外面放return

          猜想:難道這種放的和第一種放的會(huì)不一樣嗎?所以大膽猜想,結(jié)果應(yīng)該還是ccc。

          運(yùn)行結(jié)果:


          運(yùn)行結(jié)果居然是bbb,是不是很吃驚,what?居然和猜想不一樣?當(dāng)然這時(shí)候小編決定debug,看看它是怎么走的,最終發(fā)現(xiàn),當(dāng)運(yùn)行到finally里面的str="ccc"的時(shí)候,并沒有走finally下面的這個(gè)return,而是直接到main方法里的

          String ff = Test002.ff();

          這里了,說明這里執(zhí)行的是try語句塊里的return了,所以這是為什么呢?

          趕緊翻看各種文檔,網(wǎng)上查資料,

          最終你會(huì)看到j(luò)vm官方文檔里有關(guān)于try catch finally的說明


          不知道大家的英語怎么樣,能不能翻譯一下

          通過有道、百度翻譯,大概內(nèi)容是這樣的

          如果try語句里有return,那么代碼的行為如下:1.如果有返回值,就把返回值保存到局部變量中2.執(zhí)行jsr指令跳到finally語句里執(zhí)行3.執(zhí)行完finally語句后,返回之前保存在局部變量表里的值

          所以看到這里,大家應(yīng)該差不多清楚了吧。

          3、去掉try語句塊里的return

          上面第2種說到是沒有走finally下面的這個(gè)return 的,如果把try語句塊里的return去掉,這時(shí)候不管下面的這個(gè)return是放在finally里面還是外面,這時(shí)候相當(dāng)于程序運(yùn)行從上到下,遇到return截止,所以運(yùn)行結(jié)果最終是“ccc”


          以上的測試代碼,小編放在這里,想要測試的小伙伴們,可以直接測試

          public class Test002 {    public static void main(String[] args) {        String ff = Test002.ff();        System.out.println(ff);    }    public static String ff(){        String str = "aaa";        try {             str = "bbb";             return str;         }catch (Exception e){            e.printStackTrace();        }finally {            str = "ccc";            //return str;        }        return  str;    }}

          高級(jí)版測試

          下面小編就不一一介紹了,相信大家都已經(jīng)明白了,只不過是將字符串變成++i?這種形式



          這兩種情況和上面的初級(jí)版測試字符串的是一樣的,所以上面清楚了,這個(gè)應(yīng)該也清楚了

          但是當(dāng)變成?i++的形式之后,你就會(huì)發(fā)現(xiàn)......



          代碼放這里了,想測試的小伙伴們,可以拿去測試哦

          public class Test002 {    public static void main(String[] args) {        int ff = Test002.ff();        System.out.println(ff);    }    public static int ff(){        int str = 1;        try {             str = str++;             return str;        }catch (Exception e){            e.printStackTrace();        }finally {            str = str++;            //return str;        }        return  str;    }}


          版權(quán)聲明:本文為博主原創(chuàng)文章,遵循?CC 4.0 BY-SA?版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。

          本文鏈接:

          https://blog.csdn.net/qq_27471405/article/details/80928623




          粉絲福利:108本java從入門到大神精選電子書領(lǐng)取

          ???

          ?長按上方鋒哥微信二維碼?2 秒
          備注「1234」即可獲取資料以及
          可以進(jìn)入java1234官方微信群



          感謝點(diǎn)贊支持下哈?

          瀏覽 39
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩欧美电影一区 | 国内三级在线 | 人人综合| 天天撸天天草天天日 | 91视频网站 |