<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


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


    網站導航:
     
    主站蜘蛛池模板: 少妇高潮太爽了在线观看免费| 亚洲伊人精品综合在合线| 成年性羞羞视频免费观看无限| GOGOGO高清免费看韩国| 亚洲aⅴ无码专区在线观看| 亚洲午夜在线一区| 国产亚洲精品一品区99热| 国产一区二区免费在线| 91在线视频免费看| 3d动漫精品啪啪一区二区免费| 国产精品无码免费专区午夜| 国产成人亚洲毛片| 亚洲成AV人片高潮喷水| 亚洲AV一二三区成人影片| 亚洲国语精品自产拍在线观看 | 亚洲经典在线观看| 亚洲精品白浆高清久久久久久| 亚洲精品无码日韩国产不卡?V| 国产午夜免费秋霞影院| 国产裸模视频免费区无码| 成人黄动漫画免费网站视频 | 高清国语自产拍免费视频国产| 四虎永久在线精品免费观看视频| 日韩中文字幕免费视频| 久久久久免费精品国产| 中文字幕视频免费在线观看| 国产特黄特色的大片观看免费视频| 香港一级毛片免费看| 美女视频黄频a免费大全视频| 国产成人高清亚洲一区久久| 久久精品国产亚洲AV电影网| 国产精品亚洲专区无码牛牛| 狠狠综合亚洲综合亚洲色| 黄色a三级三级三级免费看| 免费观看又污又黄在线观看| 手机永久免费的AV在线电影网| 免费的黄网站男人的天堂| 一级毛片a女人刺激视频免费 | 亚洲成人高清在线| 中文亚洲AV片在线观看不卡| 亚洲狠狠婷婷综合久久久久|