<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

      回復  更多評論
      
    主站蜘蛛池模板: 成人久久免费网站| 深夜特黄a级毛片免费播放| 日本视频在线观看永久免费| 免费中文字幕不卡视频| 亚洲精品国产精品| 美女被免费视频网站a国产| 亚洲女子高潮不断爆白浆| 毛片a级三毛片免费播放| 亚洲午夜精品久久久久久app| 亚洲免费综合色在线视频| 亚洲综合色丁香婷婷六月图片| 动漫黄网站免费永久在线观看| 亚洲人成网站在线观看播放动漫 | 日韩在线视频免费| 亚洲第一区精品日韩在线播放| 羞羞视频免费网站日本| 亚洲中文字幕无码久久综合网| 日本免费久久久久久久网站| 99久久精品国产亚洲| 欧洲黑大粗无码免费| 看Aⅴ免费毛片手机播放| 久久久久久久亚洲精品| 三年片在线观看免费观看大全一| 亚洲资源在线视频| 四色在线精品免费观看| 一级毛片免费一级直接观看| 精品国产亚洲一区二区三区| 亚洲精品视频免费看| 亚洲AV第一成肉网| 亚洲国产精品一区二区成人片国内 | 亚洲成av人在线观看网站| 亚洲片一区二区三区| 亚洲免费在线播放| 亚洲精品无码专区在线播放| 亚洲一本大道无码av天堂| 日本免费人成视频在线观看| 亚洲日韩一中文字暮| 亚洲AV午夜成人片| 日韩免费视频一区| 久久免费福利视频| 国产亚洲成在线播放va|