程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java異常處置中同時有finally和return語句的履行成績

Java異常處置中同時有finally和return語句的履行成績

編輯:關於JAVA

Java異常處置中同時有finally和return語句的履行成績。本站提示廣大學習愛好者:(Java異常處置中同時有finally和return語句的履行成績)文章只能為提供參考,不一定能成為您想要的結果。以下是Java異常處置中同時有finally和return語句的履行成績正文


在Java中當try、finally語句中包括return語句時,履行情形究竟是如何的,finally中的代碼能否履行,年夜家眾口紛纭,有的說會履行,有的說不會履行,究竟哪一種說法准確,如今經由過程上面的例子加以解釋:
     第一種情形: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呢?上面是履行的成果

try..... 
17 b 
8 a 

 我們發明最初的成果是a,然則b優先於a打印出來了,這是為何呢?經由過程debug單步驟試我們發明,在履行try中的return之前會先履行finally中的代碼,以後再履行return語句。假如finally中也包括return語句,會湧現甚麼情形呢,我們看第二種情形。
     第二種情形: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";,會湧現甚麼樣的成果呢?字符串s是a照樣b呢?

try..... 
8 b 

 我們發明最初的打印成果是b。
 

我們曉得return語句用在某一個辦法中,一是用於前往函數的履行成果,二是用於前往值為void類型的函數中,僅僅是一個return語句(return ;),此時用於停止辦法的履行,也即此return後的語句將不會被履行,固然,這類情形下return語句後不克不及再有其它的語句了。

 

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

  法式履行的成果為:

run:
try履行中...
finally履行中...
3
勝利構建 (總時光: 0 秒)

  留意,2與3地位處的return語句只能有一個,而且2、3、4中必需有一個return語句,假如2出履行前方法就停止了,3處的語句得不到履行。

   try語句塊履行到1處時,會將會將函數的前往值寄存到別的一個暫時變量(分歧與c的變量,它的值為102)中,因為未產生異常,緊接著將會履行finally語句塊,2處又碰到一個語句塊,並將前往值寄存莅臨時變量(值為3)中,終究前往的是此處的暫時變量的值,此處return履行完成後,該辦法停止。  

 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語句,函數終究前往的是第一個暫時變量的值,也即102,履行成果以下:

run:
try
finally
102
勝利構建 (總時光: 0 秒)

結論:1.不管try外面有無return語句,finally語句必定都邑履行(不愧是finally,名字起的好)。
        2.假如finally中沒有return語句,try外面有return,那末在履行try中的return語句之前會先去履行finally中的代碼,再去履行try中的return語句;假如在finally中也包括return語句,將會直接前往,不再去履行try中的return語句。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved