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

深入剖析Java中的各種異常處理方式

 更新時間:2015年07月31日 15:04:26   作者:zinss26914  
這篇文章主要介紹了深入剖析Java中的各種異常處理方式,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下

1. 調(diào)試追蹤代碼:

  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,當(dāng)catch遇上return

   

public static int catchTest() { 
    int res = 0; 
     
    try { 
      res = 10 / 0; // 拋出Exception,后續(xù)處理被拒絕 
      enterTryMethod(); 
      return res; // Exception已經(jīng)拋出,沒有獲得被執(zhí)行的機(jī)會 
    } catch (Exception e) { 
      enterExceptionMethod(); 
      return 1;  // Exception拋出,獲得了調(diào)用方法并返回方法值的機(jī)會 
    } 
  } 

后臺輸出結(jié)果:

  enter catch field 
  1 

3. 拋出Exception,當(dāng)catch體里有return,finally體的代碼塊將在catch執(zhí)行return之前被執(zhí)行

   

public static int catchTest() { 
    int res = 0; 
     
    try { 
      res = 10 / 0; // 拋出Exception,后續(xù)處理被拒絕 
      enterTryMethod(); 
      return res; // Exception已經(jīng)拋出,沒有獲得被執(zhí)行的機(jī)會 
    } catch (Exception e) { 
      enterExceptionMethod(); 
      return 1;  // Exception拋出,獲得了調(diào)用方法并返回方法值的機(jī)會 
    } finally { 
      enterFinallyMethod(); // Exception拋出,finally代碼將在catch執(zhí)行return之前被執(zhí)行 
    } 
  } 

后臺輸出結(jié)果:

  enter catch field 
  enter finally method 
  1 

4. 不拋出Exception,當(dāng)finally代碼塊里面遇上return,finally執(zhí)行完后將結(jié)束整個方法

  public static int catchTest() { 
    int res = 0; 
     
    try { 
      res = 10 / 2; // 不拋出Exception 
      enterTryMethod(); 
      return res; // 獲得被執(zhí)行的機(jī)會,但執(zhí)行需要在finally執(zhí)行完成之后才能被執(zhí)行 
    } catch (Exception e) { 
      enterExceptionMethod(); 
      return 1; 
    } finally { 
      enterFinallyMethod(); 
      return 1000; // finally中含有return語句,這個return將結(jié)束這個方法,不會在執(zhí)行完之后再跳回try或者catch繼續(xù)執(zhí)行,方法到此結(jié)束 
    } 
  } 

后臺輸出結(jié)果:

  enter after try field 
  enter finally method 
  1000 

5. 不拋Exception,當(dāng)finally代碼塊里面遇上System.exit()方法將結(jié)束和終止整個程序,而不只是方法

 

  public static int catchTest() { 
    int res = 0; 
     
    try { 
      res = 10 / 2; // 不拋出Exception 
      enterTryMethod(); 
      return res; // 獲得被執(zhí)行的機(jī)會,但由于finally已經(jīng)終止程序,返回值沒有機(jī)會被返回 
    } catch (Exception e) { 
      enterExceptionMethod(); 
      return 1; 
    } finally { 
      enterFinallyMethod(); 
      System.exit(0); // finally中含有System.exit()語句,System.exit()將退出整個程序,程序?qū)⒈唤K止 
    } 
  } 

后臺輸出結(jié)果:

  enter after try field 
  enter finally method 

6. 拋出Exception,當(dāng)catch和finally同時遇上return,catch的return返回值將不會被返回,finally的return語句將結(jié)束整個方法并返回

   

 public static int catchTest() { 
    int res = 0; 
     
    try { 
      res = 10 / 0; // 拋出Exception,后續(xù)處理將被拒絕 
      enterTryMethod(); 
      return res; // Exception已經(jīng)拋出,沒有獲得被執(zhí)行的機(jī)會 
    } catch (Exception e) { 
      enterExceptionMethod(); 
      return 1; // Exception已經(jīng)拋出,獲得被執(zhí)行的機(jī)會,但返回操作將被finally截斷 
    } finally { 
      enterFinallyMethod(); 
      return 10; // return將結(jié)束整個方法,返回值為10 
    } 
  } 

后臺輸出結(jié)果:

  enter catch field 
  enter finally method 
  10 

7. 不拋出Exception,當(dāng)finally遇上return,try的return返回值將不會被返回,finally的return語句將結(jié)束整個方法并返回

   

 public static int catchTest() { 
    int res = 0; 
     
    try { 
      res = 10 / 2; // 不拋出Exception 
      enterTryMethod(); 
      return res; // 獲得執(zhí)行機(jī)會,但返回將被finally截斷 
    } catch (Exception e) { 
      enterExceptionMethod(); 
      return 1; 
    } finally { 
      enterFinallyMethod(); 
      return 10; // return將結(jié)束整個方法,返回值為10 
    } 
  } 

后臺輸出結(jié)果:

  enter after try field 
  enter finally method 
  10 


結(jié)論
Java的異常處理中,程序執(zhí)行完try里面的代碼塊之后,該方法并不會立即結(jié)束,而是繼續(xù)試圖去尋找該方法有沒有finally的代碼塊

    如果沒有finally代碼塊,整個方法在執(zhí)行完try代碼塊后返回相應(yīng)的值來結(jié)束整個方法
    如果有finally代碼塊,此時程序執(zhí)行到try代碼塊里的return一句之時并不會立即執(zhí)行return,而是先去執(zhí)行finally代碼塊里的代碼

若finally代碼塊里沒有return或沒有能夠終止程序的代碼,程序在執(zhí)行完finally代碼塊代碼之后再返回try代碼塊執(zhí)行return語句來結(jié)束整個方法。若 finally 代碼塊里有 return 或含有能夠終止程序的代碼,方法將在執(zhí)行完 finally 之后被結(jié)束,不再跳回 try 代碼塊執(zhí)行 return
在拋出異常的情況下,原理也是和上面的一樣的,你把上面說到的 try 換成 catch 去理解就OK了。

相關(guān)文章

  • 解決mybatis返回boolean值時數(shù)據(jù)庫返回null的問題

    解決mybatis返回boolean值時數(shù)據(jù)庫返回null的問題

    這篇文章主要介紹了解決mybatis返回boolean值時數(shù)據(jù)庫返回null的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • java 打造阻塞式線程池的實例詳解

    java 打造阻塞式線程池的實例詳解

    這篇文章主要介紹了java 打造阻塞式線程池的實例詳解的相關(guān)資料,這里提供實例幫助大家,理解這部分知識,需要的朋友可以參考下
    2017-07-07
  • Java把Map轉(zhuǎn)為對象的實現(xiàn)代碼

    Java把Map轉(zhuǎn)為對象的實現(xiàn)代碼

    在項目開發(fā)中,經(jīng)常碰到map轉(zhuǎn)實體對象或者對象轉(zhuǎn)map的場景,工作中,很多時候我們可能比較喜歡使用第三方j(luò)ar包的API對他們進(jìn)行轉(zhuǎn)化,但這里,我想通過反射的方式對他們做轉(zhuǎn)化,感興趣的同學(xué)跟著小編來看看吧
    2023-08-08
  • Spring中的JdbcTemplate詳細(xì)解析

    Spring中的JdbcTemplate詳細(xì)解析

    這篇文章主要介紹了Spring中的JdbcTemplate詳細(xì)解析,JdbcTemplate是Spring框架中提供的一個對象,是對原始繁瑣的Jdbc API對象的簡單封裝,Spring框架為我們提供了很多的操作模板類,需要的朋友可以參考下
    2024-01-01
  • jar包沖突常用的解決方案

    jar包沖突常用的解決方案

    引言在使用java語言開發(fā),maven做項目管理時,我們經(jīng)常遇到一個頭疼的問題就是jar包沖突,這篇文章主要給大家介紹了關(guān)于jar包沖突常用的解決方案,需要的朋友可以參考下
    2023-12-12
  • springboot整合netty框架的方式小結(jié)

    springboot整合netty框架的方式小結(jié)

    Netty 是一個基于NIO的客戶、服務(wù)器端編程框架,使用Netty 可以確保你快速和簡單的開發(fā)出一個網(wǎng)絡(luò)應(yīng)用,這篇文章主要介紹了springboot整合netty框架的方式小結(jié),需要的朋友可以參考下
    2022-06-06
  • JWT在OpenFeign調(diào)用中進(jìn)行令牌中繼詳解

    JWT在OpenFeign調(diào)用中進(jìn)行令牌中繼詳解

    Feign是一個聲明式的Web Service客戶端,是一種聲明式、模板化的HTTP客戶端。而OpenFeign是Spring Cloud 在Feign的基礎(chǔ)上支持了Spring MVC的注解,如@RequesMapping等等,這篇文章主要給大家介紹了關(guān)于JWT在OpenFeign調(diào)用中進(jìn)行令牌中繼的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • Spring項目中使用Junit單元測試并配置數(shù)據(jù)源的操作

    Spring項目中使用Junit單元測試并配置數(shù)據(jù)源的操作

    這篇文章主要介紹了Spring項目中使用Junit單元測試并配置數(shù)據(jù)源的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 快速搭建springboot項目(新手入門)

    快速搭建springboot項目(新手入門)

    本文主要介紹了快速搭建springboot項目(新手入門),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 全面解析JTA 深度歷險

    全面解析JTA 深度歷險

    本文介紹了利用 JTA 深度歷險的相關(guān)內(nèi)容,充分舉例說明JTA的原理和事務(wù)處理等相關(guān)內(nèi)容,十分詳細(xì),需要的朋友可以參考下。
    2017-09-09

最新評論