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

帶你了解Java中的異常處理(上)

 更新時間:2020年08月18日 08:49:57   作者:弗蘭克的貓  
這篇文章主要介紹了Java異常處理的相關(guān)資料,幫助大家更好的理解和學習java,感興趣的朋友可以了解下

當當當當當當,各位看官,好久不見,甚是想念。

  今天我們來聊聊Java里的一個小妖精,那就是異常。

什么是異常?什么是異常處理?

  異常嘛,顧名思義就是不正常,(逃),是Java程序運行時,發(fā)生的預料之外的事情,它阻止了程序按照程序員的預期正常執(zhí)行。

  異常處理,應(yīng)該說異常處理機制,就是專門用來制服這個小妖精的法寶。Java中的異常處理機制能讓程序在異常發(fā)生時,按照代碼的預先設(shè)定的異常處理邏輯,針對性地處理異常,讓程序盡最大可能恢復正常并繼續(xù)執(zhí)行,且保持代碼的清晰。

  簡而言之,Java異常處理就是能讓我們主動迎擊可能到來的異常,并將它們以圓潤的方式處理掉。

  還是先來看個小栗子,看看java里的異常長什么樣。

public class Test {
 public static void main(String args[]){
 int i = 0 / 0;
 System.out.println("i = " + i);
 }
}

  別慌別慌,不要看到紅色提示就內(nèi)心崩潰只想關(guān)掉IDE,來,抓緊我的手,帶你看清“異常”這個磨人的小妖精的真面目(滑稽)。

  代碼里將0作為了分母,因此程序會發(fā)生算術(shù)異常,拋出一個異常后,如果沒有任何處理,默認會終止程序,所以后面的打印內(nèi)容并沒有輸出。在異常內(nèi)容里,有說明異常類型為:java.lang.ArithmeticException,也就是算術(shù)異常,后面跟著的是異常原因: / by zero,也就是說異常出現(xiàn)的原因是將0作為了分母,而且后面還有堆棧信息,指出了異常拋出的位置是在com.frank.chapter16.main.Test.main這個包下,Test類的第11行(這個行數(shù)如果跟你想的不一樣,不要在意,因為我的代碼開始之前還有一些不可描述的說明信息),因為只有一次方法調(diào)用,所以沒有很長的堆棧信息,看起來也很簡潔明了。

  所以你看,其實異常也沒那么可怕吧,不僅給了異常原因,還告訴了你這個bug是出在第幾行,所以好好利用它,可以幫助你寫出更難以發(fā)現(xiàn)的bug,呸,說錯了,可以幫助你更容易找到bug(手動滑稽)。

  如果不希望拋出異常后程序就結(jié)束,而是希望它繼續(xù)運行呢?那么就捕獲它。

如何使用異常處理

  我們來把上面那個栗子改改:

public class Test {
 public static void main(String args[]){
 try{
 int i = 0 / 0;
 }catch (Exception e){
 System.out.println("好像發(fā)生異常了,但是我不管,我還要繼續(xù)運行");
 }
 System.out.println("運行完畢!");
 }
}

  輸出如下:

好像發(fā)生異常了,但是我不管,我還要繼續(xù)運行
運行完畢!

  好的,很強勢,現(xiàn)在即使拋出了異常,程序也繼續(xù)運行了。異常就像是一頭野獸,但你一旦捕獲它,馴服它,就可以為你所用,為所欲為了。

  try...catch...是常用的異常處理搭配,如果在try語句塊中發(fā)生了異常,如果剛好這個異常被捕獲到了,那么會直接跳到catch語句塊中,執(zhí)行catch語句中的代碼,像上面的栗子里,因為對Exception類進行了捕獲處理,所以當它的子類異常java.lang.ArithmeticException被拋出來的時候,也能捕獲它。關(guān)于Exception類的結(jié)構(gòu)層次關(guān)系,后面再做詳細介紹。

  還有另外一種搭配方式,那就是try...catch...finally,finally語句塊比catch要強勢的多,前面說了catch語句塊必須要捕獲到了特定的Exception才會執(zhí)行里面的代碼,如果catch的是ArithmeticException但是拋出的卻是空指針異常,那就不會被捕獲了,異常也就逃之夭夭了。這個時候,finally的優(yōu)勢就展示出來了,不管拋出什么樣的異常,也不管是否拋出了異常,finally中的代碼都會被執(zhí)行。所以一般的用法是在finally語句塊里釋放掉那些需要被釋放的資源,如socket連接,關(guān)閉io流,關(guān)閉數(shù)據(jù)庫連接等等。也就是說一般在finally中收拾try中拋出的爛攤子,心疼一秒finally,果然能者多勞啊。

  當然,try...finally這樣的搭配也是ok的,需要注意的是,當try語句中發(fā)生了異常之后,在發(fā)生異常處之后的代碼將不會再執(zhí)行,而是跳到相應(yīng)的catchu或者finally中去。

public class Test {
 public static void main(String args[]){
 try{
 int i = 0 / 0;
 }catch (NullPointerException e) {
 System.out.println("這里捕獲空指針異常");
 }catch (ArithmeticException e){
 System.out.println("這里捕獲算術(shù)異常");
 }finally {
 System.out.println("這里是finally");
 }
 System.out.println("運行完畢!");
 }
}

 輸出如下:

這里捕獲算術(shù)異常
這里是finally
運行完畢!

  在上面的代碼中,catch語句塊是可以同時使用多個的,第一個catch語句塊捕獲的是空指針異常,但由于拋出的是算術(shù)異常,所以沒有捕獲住,但被第二個catch捕獲到了,所以第二個catch語句塊中的代碼執(zhí)行了。異常匹配是按照從上到下的順序進行匹配的,最后才執(zhí)行finally中的代碼塊。關(guān)于try...catch...finally,還有一個很有趣的return問題,如果三個語句塊里都有return,最終返回結(jié)果會是怎樣呢?m.fzitv.net/article/112427.htm這里做了詳細的說明,有興趣的話可以看一看

  絕大多數(shù)情況下,finally中的代碼都是會被執(zhí)行的,只有一種情況下,finally中的代碼不會被執(zhí)行,那就是在try語句塊中結(jié)束掉了虛擬機(如:使用 System.exit(0); )。

  關(guān)于異常,還有一個關(guān)鍵字需要介紹,那就是throw,使用throw可以主動拋出一個異常。看到這你也許會一臉懵逼,主動拋出???嫌異常不夠多,湊熱鬧不嫌事大??別急別急,中間一定有什么誤會,把刀放下,有話好好說。

  throw關(guān)鍵字確實是用來拋出異常的,你可以這樣使用:

public class Test {
 public static void main(String args[]){
 try{
 throw new NullPointerException("聽說你很閑,給你拋個異常。");
 }catch (NullPointerException e) {
 System.out.println("這里捕獲空指針異常,提示內(nèi)容:" + e.getMessage());
 e.printStackTrace();
 }
 }
}

  輸出如下:

這里捕獲空指針異常,提示內(nèi)容:聽說你很閑,給你拋個異常。
java.lang.NullPointerException: 聽說你很閑,給你拋個異常。
at com.frank.chapter16.main.Test.main(Test.java:11)

  用throw關(guān)鍵字可以拋出任意類型的異常,當然,你想的話,還有拋Error,至于什么是Error,已經(jīng)跟Exception的關(guān)系,將在下一篇里進行講解。暫時不用深究。

  在throw異常的時候,可以加上拋出異常的原因,這樣可以更方便定位問題所在,當然,一般來說不會像栗子中這樣使用的,這里只是為了簡單起見。

  到此為止,異常的上半篇已經(jīng)講解完畢,在這一篇里,說明了什么是異常,什么是異常處理,以及如何使用異常處理機制。相信大家對這個小妖精有了初步的認識,下一篇中,將會講解Exception家族都有哪些成員,如何使用自定義異常,已經(jīng)異常處理的實際使用中的正確姿勢。歡迎大家繼續(xù)關(guān)注,之后計劃每周兩篇以上的更新,如果有講解遺漏或者不好的地方,歡迎大家及時指出,共同進步!

以上就是帶你了解Java中的異常處理(上)的詳細內(nèi)容,更多關(guān)于Java異常處理的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解java各種集合的線程安全

    詳解java各種集合的線程安全

    這篇文章主要介紹了詳解java各種集合的線程安全,小編覺得挺不錯的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • 詳解java中通過post方式訪問后臺服務(wù)器

    詳解java中通過post方式訪問后臺服務(wù)器

    本篇文章主要介紹了詳解java中通過post方式訪問后臺服務(wù)器,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • java中jdk的下載和安裝全過程

    java中jdk的下載和安裝全過程

    這篇文章主要給大家介紹了關(guān)于java中jdk的下載和安裝的相關(guān)資料,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • SpringBoot配置文件bootstrap和application區(qū)別及說明

    SpringBoot配置文件bootstrap和application區(qū)別及說明

    這篇文章主要介紹了SpringBoot配置文件bootstrap和application區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Android token過期刷新處理的方法示例

    Android token過期刷新處理的方法示例

    這篇文章主要介紹了Android token過期刷新處理的方法示例,本文詳細的介紹了2種方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • mybatis查詢語句揭秘之封裝數(shù)據(jù)

    mybatis查詢語句揭秘之封裝數(shù)據(jù)

    這篇文章主要給大家介紹了關(guān)于mybatis查詢語句揭秘之封裝數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用mybatis具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • 詳談java 堆區(qū)、方法區(qū)和棧區(qū)

    詳談java 堆區(qū)、方法區(qū)和棧區(qū)

    下面小編就為大家?guī)硪黄斦刯ava 堆區(qū)、方法區(qū)和棧區(qū)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • MySQL如何設(shè)置自動增長序列SEQUENCE的方法

    MySQL如何設(shè)置自動增長序列SEQUENCE的方法

    本文主要介紹了MySQL如何設(shè)置自動增長序列SEQUENCE的方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 完美解決SpringCloud-OpenFeign使用okhttp替換不生效問題

    完美解決SpringCloud-OpenFeign使用okhttp替換不生效問題

    這篇文章主要介紹了完美解決SpringCloud-OpenFeign使用okhttp替換不生效問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java調(diào)用SSE流式接口并流式返回給前端實現(xiàn)打字輸出效果

    Java調(diào)用SSE流式接口并流式返回給前端實現(xiàn)打字輸出效果

    在Web開發(fā)中,有時我們需要將文件以流的形式返回給前端,下面這篇文章主要給大家介紹了關(guān)于Java調(diào)用SSE流式接口并流式返回給前端實現(xiàn)打字輸出效果的相關(guān)資料,需要的朋友可以參考下
    2024-08-08

最新評論

绥滨县| 博兴县| 阿拉善左旗| 璧山县| 都江堰市| 两当县| 津市市| 包头市| 阿坝| 肃宁县| 阿拉尔市| 乐至县| 满洲里市| 尼勒克县| 龙江县| 东兴市| 邯郸市| 治县。| 和顺县| 双桥区| 宁武县| 双牌县| 天峻县| 海宁市| 承德市| 象山县| 贡嘎县| 淮南市| 井研县| 杭锦旗| 聊城市| 石景山区| 通榆县| 连城县| 青神县| 黔西县| 大名县| 米林县| 临湘市| 阿拉善右旗| 隆回县|