欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java異常處理中同時有finally和return語句的執(zhí)行問題

 更新時間:2015年11月12日 16:11:38   作者:My Technology Home  
這篇文章主要介紹了Java異常處理中同時有finally和return語句的執(zhí)行問題,首先確定的是一般finally語句都會被執(zhí)行...然后,需要的朋友可以參考下

在Java中當try、finally語句中包含return語句時,執(zhí)行情況到底是怎樣的,finally中的代碼是否執(zhí)行,大家眾說紛紜,有的說會執(zhí)行,有的說不會執(zhí)行,到底哪種說法正確,現(xiàn)在通過下面的例子加以說明:
     第一種情況:try中包含return語句,finally中不包含

public class TestTry { 
  static String s=""; 
  public static void main(String args[]){ 
    s = test1(); 
    System.out.println("8 "+s); 
  } 
  public static String test1(){ 
     
    try{ 
      System.out.println("try....."); 
      return s = "a"; 
    } 
    finally{ 
      s="b";  
      System.out.println("17 "+s); 
    } 
  } 
} 

  這里我們定義了一個字符串 s,在try里面將"a"賦值給s,并直接返回,在finally里面把"b"賦值給s,最終s的值是a還是b呢?下面是執(zhí)行的結果

try..... 
17 b 
8 a 

 我們發(fā)現(xiàn)最后的結果是a,但是b優(yōu)先于a打印出來了,這是為什么呢?通過debug單步調試我們發(fā)現(xiàn),在執(zhí)行try中的return之前會先執(zhí)行finally中的代碼,之后再執(zhí)行return語句。如果finally中也包含return語句,會出現(xiàn)什么情況呢,我們看第二種情況。
     第二種情況:try,finally中都包含return語句
      我們將上面的代碼稍作改動

public class TestTry { 
  static String s=""; 
  public static void main(String args[]){ 
    s = test1(); 
    System.out.println("8 "+s); 
  } 
  public static String test1(){ 
     
    try{ 
      System.out.println("try....."); 
      return s = "a"; 
    } 
    finally{ 
      return s="b";   
       
    } 
  } 
} 

 將finally中的s="b";直接改成return s="b";,會出現(xiàn)什么樣的結果呢?字符串s是a還是b呢?

try..... 
8 b 

 我們發(fā)現(xiàn)最后的打印結果是b。
 

我們知道return語句用在某一個方法中,一是用于返回函數(shù)的執(zhí)行結果,二是用于返回值為void類型的函數(shù)中,僅僅是一個return語句(return ;),此時用于結束方法的執(zhí)行,也即此return后的語句將不會被執(zhí)行,當然,這種情況下return語句后不能再有其它的語句了。

 

  public static int print() {
    int c = 1;
    try {
      c++;
      System.out.println("try執(zhí)行中...");
      return c+100; //--------1
    } catch (Exception e) {
      e.printStackTrace();
      //return c;  //--------4
    } finally {
      c++;
      System.out.println("finally執(zhí)行中...");
      return c; //--------2
    }
    //return c;  //---------3
  }

  程序執(zhí)行的結果為:

run:
try執(zhí)行中...
finally執(zhí)行中...
3
成功構建 (總時間: 0 秒)

  注意,2與3位置處的return語句只能有一個,并且2、3、4中必須有一個return語句,如果2出執(zhí)行后方法就結束了,3處的語句得不到執(zhí)行。

   try語句塊執(zhí)行到1處時,會將會將函數(shù)的返回值存放到另外一個臨時變量(不同與c的變量,它的值為102)中,由于未發(fā)生異常,緊接著將會執(zhí)行finally語句塊,2處又遇到一個語句塊,并將返回值存放到臨時變量(值為3)中,最終返回的是此處的臨時變量的值,此處return執(zhí)行完成后,該方法結束?! ?/p>

 public static int print() {
    int c = 1;
    try {
      c++;
      System.out.println(c);
      System.out.println("try");
      return c+100; //--------1
    }finally {
      c++;
      System.out.println(c);
      System.out.println("finally");
      
    }
  }

  上述代碼中finally語句塊中沒有return語句,函數(shù)最終返回的是第一個臨時變量的值,也即102,執(zhí)行結果如下:

run:
try
finally
102
成功構建 (總時間: 0 秒)

結論:1.無論try里面有沒有return語句,finally語句一定都會執(zhí)行(不愧是finally,名字起的好)。
        2.如果finally中沒有return語句,try里面有return,那么在執(zhí)行try中的return語句之前會先去執(zhí)行finally中的代碼,再去執(zhí)行try中的return語句;如果在finally中也包含return語句,將會直接返回,不再去執(zhí)行try中的return語句。

相關文章

  • Double.parseDouble()與Double.valueOf()的區(qū)別及說明

    Double.parseDouble()與Double.valueOf()的區(qū)別及說明

    這篇文章主要介紹了Double.parseDouble()與Double.valueOf()的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 關于Java中Json的各種處理

    關于Java中Json的各種處理

    這篇文章主要介紹了關于Java中Json的各種處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring Boot實戰(zhàn)教程之自動配置詳解

    Spring Boot實戰(zhàn)教程之自動配置詳解

    Spring Boot的自動配置給開發(fā)者帶來了很大的便利,當開發(fā)人員在pom文件中添加starter依賴后,maven或者gradle會自動下載很多jar包到classpath中。下面這篇文章主要給大家介紹了關于Spring Boot自動配置的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • 簡單了解JAVA變量類型及代碼實例

    簡單了解JAVA變量類型及代碼實例

    這篇文章主要介紹了簡單了解JAVA變量類型及代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Spring boot從安裝到交互功能實現(xiàn)零基礎全程詳解

    Spring boot從安裝到交互功能實現(xiàn)零基礎全程詳解

    這篇文章主要介紹了Spring boot從安裝到交互功能得實現(xiàn)全程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • 實例講解Java中random.nextInt()與Math.random()的基礎用法

    實例講解Java中random.nextInt()與Math.random()的基礎用法

    今天小編就為大家分享一篇關于實例講解Java中random.nextInt()與Math.random()的基礎用法,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Java實現(xiàn)窗體程序顯示日歷

    Java實現(xiàn)窗體程序顯示日歷

    這篇文章主要為大家詳細介紹了Java實現(xiàn)窗體程序顯示日歷,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java在PDF中添加表格過程詳解

    Java在PDF中添加表格過程詳解

    這篇文章主要介紹了Java在PDF中添加表格過程詳解,本文將介紹通過Java編程在PDF文檔中添加表格的方法。添加表格時,可設置表格邊框、單元格對齊方式、單元格背景色、單元格合并、插入圖片、設置行高、列寬、字體、字號等,需要的朋友可以參考下
    2019-07-07
  • 詳解Quartz 與 Spring框架集成的三種方式

    詳解Quartz 與 Spring框架集成的三種方式

    這篇文章主要介紹了詳解Quartz 與 Spring框架集成的三種方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • java?啟動參數(shù)?springboot?idea詳解

    java?啟動參數(shù)?springboot?idea詳解

    這篇文章主要介紹了java?啟動參數(shù)?springboot?idea的相關知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09

最新評論