最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java異常處理中同時(shí)有finally和return語(yǔ)句的執(zhí)行問(wèn)題

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

在Java中當(dāng)try、finally語(yǔ)句中包含return語(yǔ)句時(shí),執(zhí)行情況到底是怎樣的,finally中的代碼是否執(zhí)行,大家眾說(shuō)紛紜,有的說(shuō)會(huì)執(zhí)行,有的說(shuō)不會(huì)執(zhí)行,到底哪種說(shuō)法正確,現(xiàn)在通過(guò)下面的例子加以說(shuō)明:
     第一種情況:try中包含return語(yǔ)句,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); 
    } 
  } 
} 

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

try..... 
17 b 
8 a 

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

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";,會(huì)出現(xiàn)什么樣的結(jié)果呢?字符串s是a還是b呢?

try..... 
8 b 

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

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

 

  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í)行的結(jié)果為:

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

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

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

 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語(yǔ)句塊中沒(méi)有return語(yǔ)句,函數(shù)最終返回的是第一個(gè)臨時(shí)變量的值,也即102,執(zhí)行結(jié)果如下:

run:
try
finally
102
成功構(gòu)建 (總時(shí)間: 0 秒)

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

相關(guān)文章

  • 關(guān)于Filter中獲取請(qǐng)求體body后再次讀取的問(wèn)題

    關(guān)于Filter中獲取請(qǐng)求體body后再次讀取的問(wèn)題

    這篇文章主要介紹了關(guān)于Filter中獲取請(qǐng)求體body后再次讀取的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Springboot實(shí)現(xiàn)多文件上傳代碼解析

    Springboot實(shí)現(xiàn)多文件上傳代碼解析

    這篇文章主要介紹了Springboot實(shí)現(xiàn)多文件上傳代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • IDEA一鍵完成格式化、去除無(wú)用引用、編譯的操作

    IDEA一鍵完成格式化、去除無(wú)用引用、編譯的操作

    這篇文章主要介紹了IDEA一鍵完成格式化、去除無(wú)用引用、編譯的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 快速使用IDEA圖形化界面連接Phoenix的方法

    快速使用IDEA圖形化界面連接Phoenix的方法

    最近很多朋友跟小編留言如何使用IDEA圖形化界面連接Phoenix,在這小編就不一一回復(fù)大家了,今天抽空給大家整理一篇教程關(guān)于idea 圖形化界面連接Phoenix的相關(guān)知識(shí),需要的朋友快來(lái)學(xué)習(xí)下吧
    2021-05-05
  • 一文總結(jié)Java獲取文件后綴名的所有方法

    一文總結(jié)Java獲取文件后綴名的所有方法

    Java是一種應(yīng)用廣泛的編程語(yǔ)言,可以通過(guò)多種方式來(lái)實(shí)現(xiàn)對(duì)文件的操作,如文件名后綴、文件擴(kuò)展名等,下面這篇文章主要給大家介紹了關(guān)于Java獲取文件后綴名的所有方法,需要的朋友可以參考下
    2023-05-05
  • Spring實(shí)現(xiàn)IoC的多種方式小結(jié)

    Spring實(shí)現(xiàn)IoC的多種方式小結(jié)

    本篇文章主要介紹了Spring實(shí)現(xiàn)IoC的多種方式小結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • Java類鎖、對(duì)象鎖、私有鎖沖突測(cè)試

    Java類鎖、對(duì)象鎖、私有鎖沖突測(cè)試

    這篇文章主要介紹了Java類鎖、對(duì)象鎖、私有鎖沖突測(cè)試,得出結(jié)論是加鎖方法夠成了競(jìng)爭(zhēng)關(guān)系,同一時(shí)刻只能有一個(gè)方法能執(zhí)行,需要的朋友可以參考下
    2014-10-10
  • Java項(xiàng)目中獲取路徑的絕對(duì)路徑問(wèn)題和相對(duì)路徑問(wèn)題

    Java項(xiàng)目中獲取路徑的絕對(duì)路徑問(wèn)題和相對(duì)路徑問(wèn)題

    這篇文章主要介紹了如何Java項(xiàng)目中獲取文件地址,在 Java 項(xiàng)目中我們經(jīng)常會(huì)讀取配置文件,但是文件的路徑在獲取時(shí)我們是怎么得到的?下面我們就一起進(jìn)入文章學(xué)習(xí)該內(nèi)容吧,需要的朋友可以參考下
    2022-02-02
  • SpringBoot+layuimini實(shí)現(xiàn)左側(cè)菜單動(dòng)態(tài)展示的示例代碼

    SpringBoot+layuimini實(shí)現(xiàn)左側(cè)菜單動(dòng)態(tài)展示的示例代碼

    Layuimini是Layui的升級(jí)版,它是專業(yè)做后臺(tái)頁(yè)面的框架,而且是適合PC端和移動(dòng)端,以下地址可以在PC端顯示,也可以在手機(jī)上顯示,只不過(guò)會(huì)做自適應(yīng),本文將給大家介紹了SpringBoot+layuimini實(shí)現(xiàn)左側(cè)菜單動(dòng)態(tài)展示的方法,需要的朋友可以參考下
    2024-04-04
  • Java設(shè)計(jì)模式之單例模式

    Java設(shè)計(jì)模式之單例模式

    這篇文章主要給大家介紹了關(guān)于Java單例模式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-10-10

最新評(píng)論

商水县| 宣威市| 遂溪县| 含山县| 绍兴市| 仪征市| 永泰县| 大兴区| 平阳县| 文成县| 江津市| 庆城县| 昌图县| 溧水县| 邛崃市| 碌曲县| 红河县| 和田市| 馆陶县| 霸州市| 焦作市| 林口县| 闸北区| 高平市| 莱州市| 敖汉旗| 清涧县| 玛多县| 丽江市| 尼木县| 巍山| 南岸区| 和林格尔县| 牙克石市| 万州区| 四平市| 广元市| 中阳县| 碌曲县| 松溪县| 黄大仙区|