程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 深刻分析Java中的各類異常處置方法

深刻分析Java中的各類異常處置方法

編輯:關於JAVA

深刻分析Java中的各類異常處置方法。本站提示廣大學習愛好者:(深刻分析Java中的各類異常處置方法)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻分析Java中的各類異常處置方法正文


1. 調試追蹤代碼:

  public static void enterTryMethod() { 
    System.out.println("enter after try field"); 
  } 
   
  public static void enterExceptionMethod() { 
    System.out.println("enter catch field"); 
  } 
   
  public static void enterFinallyMethod() { 
    System.out.println("enter finally method"); 
  } 

2. 拋出Exception,沒有finally,當catch趕上return

   

public static int catchTest() { 
    int res = 0; 
     
    try { 
      res = 10 / 0; // 拋出Exception,後續處置被謝絕 
      enterTryMethod(); 
      return res; // Exception曾經拋出,沒有取得被履行的機遇 
    } catch (Exception e) { 
      enterExceptionMethod(); 
      return 1;  // Exception拋出,取得了挪用辦法並前往辦法值的機遇 
    } 
  } 

後台輸入成果:

  enter catch field 
  1 

3. 拋出Exception,當catch體裡有return,finally體的代碼塊將在catch履行return之前被履行

   

public static int catchTest() { 
    int res = 0; 
     
    try { 
      res = 10 / 0; // 拋出Exception,後續處置被謝絕 
      enterTryMethod(); 
      return res; // Exception曾經拋出,沒有取得被履行的機遇 
    } catch (Exception e) { 
      enterExceptionMethod(); 
      return 1;  // Exception拋出,取得了挪用辦法並前往辦法值的機遇 
    } finally { 
      enterFinallyMethod(); // Exception拋出,finally代碼將在catch履行return之前被履行 
    } 
  } 

後台輸入成果:

  enter catch field 
  enter finally method 
  1 

4. 不拋出Exception,當finally代碼塊外面趕上return,finally履行完後將停止全部辦法

  public static int catchTest() { 
    int res = 0; 
     
    try { 
      res = 10 / 2; // 不拋出Exception 
      enterTryMethod(); 
      return res; // 取得被履行的機遇,但履行須要在finally履行完成以後能力被履行 
    } catch (Exception e) { 
      enterExceptionMethod(); 
      return 1; 
    } finally { 
      enterFinallyMethod(); 
      return 1000; // finally中含有return語句,這個return將停止這個辦法,不會在履行完以後再跳回try或許catch持續履行,辦法到此停止 
    } 
  } 

後台輸入成果:

  enter after try field 
  enter finally method 
  1000 

5. 不拋Exception,當finally代碼塊外面趕上System.exit()辦法將停止和終止全部法式,而不只是辦法

 

  public static int catchTest() { 
    int res = 0; 
     
    try { 
      res = 10 / 2; // 不拋出Exception 
      enterTryMethod(); 
      return res; // 取得被履行的機遇,但因為finally曾經終止法式,前往值沒無機會被前往 
    } catch (Exception e) { 
      enterExceptionMethod(); 
      return 1; 
    } finally { 
      enterFinallyMethod(); 
      System.exit(0); // finally中含有System.exit()語句,System.exit()將加入全部法式,法式將被終止 
    } 
  } 

後台輸入成果:

  enter after try field 
  enter finally method 

6. 拋出Exception,當catch和finally同時趕上return,catch的return前往值將不會被前往,finally的return語句將停止全部辦法並前往

   

 public static int catchTest() { 
    int res = 0; 
     
    try { 
      res = 10 / 0; // 拋出Exception,後續處置將被謝絕 
      enterTryMethod(); 
      return res; // Exception曾經拋出,沒有取得被履行的機遇 
    } catch (Exception e) { 
      enterExceptionMethod(); 
      return 1; // Exception曾經拋出,取得被履行的機遇,但前往操作將被finally截斷 
    } finally { 
      enterFinallyMethod(); 
      return 10; // return將停止全部辦法,前往值為10 
    } 
  } 

後台輸入成果:

  enter catch field 
  enter finally method 
  10 

7. 不拋出Exception,當finally趕上return,try的return前往值將不會被前往,finally的return語句將停止全部辦法並前往

   

 public static int catchTest() { 
    int res = 0; 
     
    try { 
      res = 10 / 2; // 不拋出Exception 
      enterTryMethod(); 
      return res; // 取得履行機遇,但前往將被finally截斷 
    } catch (Exception e) { 
      enterExceptionMethod(); 
      return 1; 
    } finally { 
      enterFinallyMethod(); 
      return 10; // return將停止全部辦法,前往值為10 
    } 
  } 

後台輸入成果:

  enter after try field 
  enter finally method 
  10 


結論
Java的異常處置中,法式履行完try外面的代碼塊以後,該辦法其實不會立刻停止,而是持續試圖去尋覓該辦法有無finally的代碼塊

    假如沒有finally代碼塊,全部辦法在履行完try代碼塊後前往響應的值來停止全部辦法
    假如有finally代碼塊,此時法式履行到try代碼塊裡的return一句之時其實不會立刻履行return,而是先去履行finally代碼塊裡的代碼

若finally代碼塊裡沒有return或沒有可以或許終止法式的代碼,法式在履行完finally代碼塊代碼以後再前往try代碼塊履行return語句來停止全部辦法。若 finally 代碼塊裡有 return 或含有可以或許終止法式的代碼,辦法將在履行完 finally 以後被停止,不再跳回 try 代碼塊履行 return
在拋出異常的情形下,道理也是和下面的一樣的,你把下面說到的 try 換成 catch 去懂得就OK了。

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