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

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

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

    隨筆-204  評論-149  文章-0  trackbacks-0

    由一個筆試題想到的
    try有return,catch也有return,且有finally塊
    并且finally中對resutl進行的賦值并不影響之前的已經(jīng)return 的result值
    最后返回的result引用還是之前的result引用
    finally其實也可以有return,一般eclipse會提示finally block does not complete normally,但不會報錯
    并且會忽略之前的返回和拋出的異常

    package returnfinally;

    public class TestReturnAfterFinally {

         
    public static void main(String[] args) {
          
    try {
           String result 
    = testException();
           System.out.println();
           System.out.println(result);
          }
     catch (Exception e) {
          
    // System.out.println(result);
           System.out.println(e.toString());
          }

         }

         
        
    public static String testException() throws Exception {
          String result 
    = "";
          
    try {
           
    // if (true) throw new MyException("異常!");
           
    //int i = 0;
           int i=0;
           
    int b = 10 / i;
           
    //函數(shù)不會正常的返回,在返回前已經(jīng)拋出異常了,拋出異常即函數(shù)返回了
           /*
            * 相當于catch(Exception e){
            *    throw e;
            * }
            
    */

           
    /*
           result="in try";
           return result;
           
    */

           
    throw new Exception("h");
          }
    catch(Exception e){
              System.out.println(e);
              Exception ee 
    = e;
              
    //throw ee;
              result="in catch";
              
    return result;
          }

          
    finally {
           result 
    = "in finally!";
           System.out.println(result);
           
    //return result;
           
    //throw new Exception("ex cretated in finally");
          }

          
          
    //return result;
         }


        }




     

    posted on 2009-04-30 16:04 Frank_Fang 閱讀(2274) 評論(3)  編輯  收藏 所屬分類: Java編程

    評論:
    # re: java try return finally 2009-04-30 16:17 | Frank_Fang
    剛看見一個分析,不過后面的使用javap沒看懂
    http://blog.csdn.net/nomad2/archive/2006/05/10/722764.aspx  回復  更多評論
      
    # re: java try return finally 2009-05-24 23:14 | Frank_Fang
    主要關注一下finally中有return 或者throw時程序的執(zhí)行流程
      回復  更多評論
      
    # re: java try return finally 2009-05-24 23:14 | Frank_Fang
    java中finally子句是怎么運行的?

    看下面的程序:

    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);
    }
    }
    }

    運行結(jié)果為:

    abc
    a: 2
    aa:1

    由此可知:在try語句中,在執(zhí)行return語句時,要返回的結(jié)果已經(jīng)準備好了,就在此時,程序轉(zhuǎn)到finally執(zhí)行了。

    在轉(zhuǎn)去之前,try中先把要返回的結(jié)果存放到不同于a的局部變量中去,執(zhí)行完finally之后,在從中取出返回結(jié)果,

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

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

    執(zhí)行結(jié)果如下:

    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

      回復  更多評論
      
    主站蜘蛛池模板: 国产国产人免费人成免费视频| 中国一级全黄的免费观看| av无码久久久久不卡免费网站| 亚洲av无码不卡| 久久免费视频精品| 在线观看亚洲一区二区| 1000部拍拍拍18勿入免费视频下载 | 亚洲综合日韩久久成人AV| 精品国产呦系列在线观看免费| 在线精品亚洲一区二区三区| 国产免费人成视频在线播放播| 亚洲国产婷婷六月丁香| 免费毛片a线观看| 亚洲理论片在线观看| 久久久久久国产精品免费免费| 亚洲91精品麻豆国产系列在线| 日韩精品视频免费观看| 污视频网站在线观看免费| 久久亚洲国产成人精品无码区| 国产无遮挡裸体免费视频在线观看| 99人中文字幕亚洲区| 免费观看美女裸体网站| 亚洲AV无码国产精品永久一区| 国产免费av片在线播放| 亚洲国产成人AV在线播放 | 男男gay做爽爽免费视频| 全部免费毛片在线| 无码AV动漫精品一区二区免费| 亚洲成年人啊啊aa在线观看| 久久国产精品免费一区| 亚洲AV无码专区国产乱码电影| 91久久精品国产免费直播| 亚洲国产综合在线| 成年大片免费视频| 免费激情网站国产高清第一页| 伊人亚洲综合青草青草久热| 香蕉视频免费在线| 国产亚洲人成网站在线观看| 国产猛男猛女超爽免费视频| 久久国产亚洲高清观看| 欧美好看的免费电影在线观看|