<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 110, comments - 101, trackbacks - 0, articles - 7
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    try catch finally return 執行順序

    Posted on 2011-11-10 21:20 云云 閱讀(529) 評論(1)  編輯  收藏

    public class JVMTest {

    public static void main(String[] args){
    System.out.println("aa:" + aa());
    }
    public static int aa(){
    int a = 1;
    int b = 10;
    try{
    System.out.println("abc");
    return a;
    }finally{
    a = 2;
    System.out.println("a: "+ a);
    }
    }
    }

    運行結果為:

    abc
    a: 2
    aa:1

    由此可知:在try語句中,在執行return語句時,要返回的結果已經準備好了,就在此時,程序轉到finally執行了。

    在轉去之前,try中先把要返回的結果存放到不同于a的局部變量中去,執行完finally之后,在從中取出返回結果,

    因此,即使finally中對變量a進行了改變,但是不會影響返回結果。

    但是,如果在finally子句中最后添加上return a會怎樣呢?

    執行結果如下:

    Compiling 1 source file to E:\sun\InsideJVM\build\classes
    E:\sun\InsideJVM\src\JVMTest.java:37: warning: finally clause cannot complete normally
    }
    1 warning
    compile-single:
    run-single:
    abc
    a: 2
    aa:2

    測試1
    public static int test1()
    {
    int i = 1;
    try
    {
    return ++i;
    }
    finally
    {
    ++i;
    Console.WriteLine("finally:" + i);
    }
    }

    static void Main(string[] args)
    {
    Console.WriteLine("Main:" + test1());
    }
    結果:
    finally:3
    Main:2

    測試2
    public static int test2()
    {
    int i = 1;
    try
    {
    throw new Exception();
    }
    catch
    {
    return ++i;
    }
    finally
    {
    ++i;
    Console.WriteLine("finally:" + i);
    }
    }

    static void Main(string[] args)
    {
    Console.WriteLine("Main:" + test2());
    }
    結果:
    finally:3
    Main:2

    測試3
    public static int test3()
    {
    try{}
    finally
    {
    return 1;
    }
    }

    結果:
    編譯錯誤,控制不能離開 finally 子句主體。

    結論:

    1.不管出沒出現異常,finally塊中的語句都會執行;
    2.當trycatch塊中有return語句時,finally塊中的語句仍會執行;
    3.finally塊中的語句是在return語句執行之后才執行的,即函數返回值是在finally塊中語句執行前確定的;
    4.finally塊中不能包含return語句。

    總結:finallyreturn前執行,在finally的操作,不會改變已經確定的return的值,

    finally不能加return語句。出現異常,先找是否有處理器可以處理這個異常.finally


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 男女超爽视频免费播放| 国产精品国产午夜免费福利看| 四虎必出精品亚洲高清| 久久精品国产免费| 亚洲日韩一页精品发布| caoporn成人免费公开| 99re6在线精品视频免费播放| 国产亚洲综合色就色| 久久免费国产视频| 亚洲狠狠ady亚洲精品大秀| 国产免费毛不卡片| 亚洲色精品VR一区区三区| 免费无码一区二区三区蜜桃大| 亚洲最大天堂无码精品区| 免费a级毛片永久免费| 国产精品九九久久免费视频| 国产A在亚洲线播放| 亚洲一级免费视频| 亚洲狠狠婷婷综合久久| 亚洲一级黄色视频| 亚洲精品一卡2卡3卡三卡四卡| 2021国产精品成人免费视频| 亚洲中文字幕久久无码| 亚洲精品成人片在线观看| 国产午夜免费高清久久影院 | 免费人成年激情视频在线观看 | 亚洲乱码一二三四区麻豆| 91av免费在线视频| 亚洲AV无码久久| 免费国产黄线在线观看| 亚洲AV永久无码区成人网站| 亚洲免费网站在线观看| 亚洲国产精品无码久久98| 亚洲免费在线观看| 日韩插啊免费视频在线观看 | 精品国产亚洲男女在线线电影| 男的把j放进女人下面视频免费| 亚洲一区二区三区高清视频| 免费a级黄色毛片| 99精品在线免费观看| 亚洲欧美国产国产一区二区三区|