西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

首頁編程開發(fā)java → Java方法循環(huán)嵌套調(diào)用關(guān)于返回值的陷阱

Java方法循環(huán)嵌套調(diào)用關(guān)于返回值的陷阱

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:西西整理時(shí)間:2012/12/20 12:57:16字體大小:A-A+

作者:西西點(diǎn)擊:0次評(píng)論:0次標(biāo)簽: 嵌套

上個(gè)星期修改了短信網(wǎng)關(guān)的重啟程序,結(jié)果這周又遇到了新問題。雖然有時(shí)可以重啟成功,但是有時(shí)候還是重啟失敗。本地模擬測試怎么都沒發(fā)現(xiàn)這個(gè)問題,趁著閑時(shí)的功夫,自己到正式環(huán)境將日志分析了一下,發(fā)現(xiàn)重啟不成功的原因主要在心跳3次后沒有收到響應(yīng)消息,程序不會(huì)自動(dòng)重啟,而是不斷的繼續(xù)發(fā)送心跳。

看了看代碼,沒有發(fā)現(xiàn)哪里有錯(cuò)啊。想了想,難道是由于方法嵌套調(diào)用的原因?于是自己弄了個(gè)簡單的測試,來驗(yàn)證:

 public static boolean tests(int  i){
        if(i>5){
            return false;
        }
        if(true){
           tests(++i);
        }
        return true;
    }

好小子,果然是這里的問題,原來是由于tests()方法調(diào)用了tests()方法后,每個(gè)test()方法都有自己的返回值,只有第一層的tests()方法才會(huì)把自己的返回值輸出給調(diào)用他的程序。

例如:若有程序調(diào)用了tests(1)后,tests(2)將返回值返回給了tests(1),tests(3)將返回值返回給了test(2),以此類推。運(yùn)行完tests(5)后,tests(1)還會(huì)向下執(zhí)行,最后結(jié)果不論如何都是true.

所以要想這里的結(jié)果正確,設(shè)置一個(gè)標(biāo)志位接收每個(gè)tests()方法返回的值即可。

public static boolean tests(int  i){
        boolean flag = false;
        if(i>5){
            return false;
        }
        if(true){
          flag =  tests(++i);
        }
        return flag;
    }

這樣才會(huì)得到想要的結(jié)果。

特此警示:嵌套方法調(diào)用關(guān)于返回值的陷阱

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)
    推薦文章

    沒有數(shù)據(jù)