1. 程式人生 > >try-catch-finally塊的執行流程

try-catch-finally塊的執行流程

記得前些天看try-catch-finally的東西,在很多部落格上看了很多文章,也沒有理解的很透徹,今天看到了國外的一個牛人講的,感覺非常好非常透徹,完全沒有云裡霧裡的感覺,就把它翻譯過來。

在這篇文中我們來看一下怎麼使用try-catch-finally塊來進行異常處理,在看這個之前可以先看一下try-catch

try-catch塊的流程控制

當異常不發生的時候:

當在try塊中的語句沒有丟擲異常的時候,catch永遠不會被執行。

例如:

.....
int x = 10;
int y = 10;
try{
   int num= x/y;
   System.out.println("next-statement: Inside try block");
}catch(Exception ex)
 {
    System.out.println("Exception");
 }
System.out.println("next-statement: Outside of try-catch");
...

輸出結果:
next-statement: Inside try block
next-statement: Outside of try-catch

上邊的例子中沒有異常發生,所以catch沒有執行

當異常發生的情況:

int x = 0;
int y = 10;
try{
   int num= y/x;
   System.out.println("next-statement: Inside try block");
}catch(Exception ex)
 {
    System.out.println("Exception Occurred");
 }
System.out.println("next-statement: Outside of try-catch");
...

輸出結果:
Exception Occurred
next-statement: Outside of try-catch

在上邊的例子中,有兩條語句在try塊中,因為異常發生在第一條語句中,所以第二條語句沒有被執行,因此我們可以總結:一旦異常發生try塊中剩下的語句不會被執行同時執行控制也被傳遞到catch塊中。

try/catch/finally塊的流程控制:

1、如果在try塊中發生異常那麼控制會立刻被傳遞(跳過try塊中的剩下的其他語句)到catch中去。一旦catch塊執行完成之後finally塊和其後的程式執行

2、如果在程式碼中沒有異常發生,try塊中的程式碼會被完全執行,然後執行控制被傳遞到(跳過catch塊)finally塊中

3、如果在catch或者try塊中有return語句,在這種情況下,finally也會執行,控制流是:先執行finally然後回到return語句。

考慮下邊的程式碼理解上邊的觀點:

class TestExceptions {
   static void myMethod(int testnum) throws Exception {
      System.out.println ("start - myMethod");
      if (testnum == 12) 
         throw new Exception();
      System.out.println("end - myMethod");
      return;	
   }
   public static void main(String  args[]) {
      int testnum = 12;
      try {
         System.out.println("try - first statement");
         myMethod(testnum);
         System.out.println("try - last statement");
      }
      catch ( Exception ex) {
         System.out.println("An Exception");
      }
      finally {
         System. out. println( "finally") ;
      }
      System.out.println("Out of try/catch/finally - statement");
   }
}

輸出結果:
try - first statement
start - myMethod
An Exception
finally
Out of try/catch/finally - statement

關於return和finally誰先返回的問題,請看這篇文章,點選

原文地址:http://beginnersbook.com/2013/05/flow-in-try-catch-finally/