<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 云云 閱讀(528) 評論(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。


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


    網站導航:
     
    主站蜘蛛池模板: 一二三四影视在线看片免费| 3d成人免费动漫在线观看| 青青青青青青久久久免费观看| 777亚洲精品乱码久久久久久| 国色精品va在线观看免费视频| 亚洲欧洲∨国产一区二区三区 | 亚洲国产成人久久精品动漫| 三年片在线观看免费| 激情97综合亚洲色婷婷五| 国内精品免费久久影院| 国产亚洲A∨片在线观看| 国偷自产一区二区免费视频| 亚洲国产一区在线| 18禁网站免费无遮挡无码中文 | 男男黄GAY片免费网站WWW| 亚洲 无码 在线 专区| jizz日本免费| 亚洲国产精品久久久久婷婷软件| 99在线观看免费视频| 亚洲一区二区三区在线观看网站| 日本免费网站观看| 久久一区二区三区免费| 亚洲国产精品国自产拍电影| 无码人妻一区二区三区免费手机 | 真实乱视频国产免费观看 | 亚洲AV无码片一区二区三区| 亚洲黄黄黄网站在线观看| 免费一区二区三区| 亚洲自偷自偷在线成人网站传媒| 国产无遮挡吃胸膜奶免费看视频 | 毛片免费视频播放| 污网站在线免费观看| 九月丁香婷婷亚洲综合色| 青青视频观看免费99| 立即播放免费毛片一级| 久久噜噜噜久久亚洲va久| 成年美女黄网站色大免费视频| 一级黄色毛片免费看| 亚洲欧洲国产精品久久| 亚洲第一永久AV网站久久精品男人的天堂AV| 中文成人久久久久影院免费观看 |