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

Java中的異常處理機(jī)制介紹(非常全面!)

 更新時(shí)間:2023年01月18日 10:43:18   作者:學(xué)全棧的灌湯包  
異常可能是在程序執(zhí)行過程中產(chǎn)生的,也可能是程序中throw主動(dòng)拋出的,下面這篇文章主要給大家介紹了關(guān)于Java中異常處理機(jī)制的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

異常處理機(jī)制

異常的默認(rèn)處理流程如下:

默認(rèn)會(huì)在出現(xiàn)異常的代碼那里自動(dòng)的創(chuàng)建一個(gè)異常對(duì)象:ArithmeticException。

異常會(huì)從方法中出現(xiàn)的點(diǎn)這里拋出給調(diào)用者,調(diào)用者最終拋出給JVM虛擬機(jī)。

虛擬機(jī)接收到異常對(duì)象后,先在控制臺(tái)直接輸出異常棧信息數(shù)據(jù)。

直接從當(dāng)前執(zhí)行的異常點(diǎn)干掉當(dāng)前程序。

后續(xù)代碼沒有機(jī)會(huì)執(zhí)行了,因?yàn)槌绦蛞呀?jīng)死亡。

但是默認(rèn)的異常處理機(jī)制并不好,一旦真的出現(xiàn)異常,程序立即死亡

編譯時(shí)異常處理機(jī)制

編譯時(shí)異常是編譯階段就出錯(cuò)的,所以必須處理,否則代碼根本無法通過

編譯時(shí)異常處理有三種形式:

出現(xiàn)異常直接拋出去給調(diào)用者,調(diào)用者也繼續(xù)拋出去。

出現(xiàn)異常自己捕獲處理,不麻煩別人。

前兩者結(jié)合,出現(xiàn)異常直接拋出去給調(diào)用者,調(diào)用者捕獲處理。

異常處理方式一

throws:用在方法上,可以將方法內(nèi)部出現(xiàn)的異常拋出去給本方法的調(diào)用者處理。

這種方式并不好,發(fā)生異常的方法自己不處理異常,如果異常最終拋出去給虛擬機(jī)將引起程序死亡。

拋出異常的格式:

方法 throws 異常1 ,異常2 ,異常3 ..{
  
}

規(guī)范做法: 代表可以拋出一切異常

方法 throws Exception{
  
}

public static void main(String[] args) throws Exception {
    String date = "2022-10-25 22:32:31";
    // 創(chuàng)建一個(gè)日期格式化類
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    // 解析字符串為時(shí)間對(duì)象
    Date newDate = sdf.parse(date);
    System.out.println(newDate);
}

異常處理方式二

try…catch…: 監(jiān)視捕獲異常,用在方法內(nèi)部,可以將方法內(nèi)部出現(xiàn)的異常直接捕獲處理。

這種方式還可以,發(fā)生異常的方法自己獨(dú)立完成異常的處理,程序可以繼續(xù)往下執(zhí)行。

一般格式:

 try{
   // 監(jiān)視可能出現(xiàn)異常的代碼!
 }catch(異常類型1 變量){
   // 處理異常
 }catch(異常類型2 變量){
   // 處理異常
 }...

public static void main(String[] args) {
    System.out.println("程序開始");
    parseTime("2022-10-25 22:32:31");
    System.out.println("程序結(jié)束");
}
public static void parseTime(String date) {
    try {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM-dd HH:mm:ss");
        Date newDate = sdf.parse(date);
        System.out.println(newDate);
    } catch (ParseException e) {
        e.printStackTrace();
    }
}

推薦格式: Exception可以捕獲處理一切異常類型, 通過Exception使用一個(gè)catch塊!

try{
  // 可能出現(xiàn)異常的代碼!
}catch (Exception e){
  e.printStackTrace(); // 直接打印異常棧信息
}

異常處理方式三

前兩者結(jié)合: 方法直接將異通過throws拋出去給調(diào)用者, 讓調(diào)用者收到異常后直接捕獲處理, 而不是方法內(nèi)部自己處理。

public static void main(String[] args) {
    System.out.println("程序開始");
    // 方法調(diào)用者捕獲和處理異常
    try {
        parseTime("2022-10-25 22:32:31");
    } catch (ParseException e) {
        e.printStackTrace();
    }
    System.out.println("程序結(jié)束");
}
// 方法中直接拋出異常給方法調(diào)用者
public static void parseTime(String date) throws ParseException {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM-dd HH:mm:ss");
    Date newDate = sdf.parse(date);
    System.out.println(newDate);
}

異常處理方案總結(jié):

在開發(fā)中按照規(guī)范來說第三種方式是最好的:底層的異常拋出去給最外層,最外層集中捕獲處理。

實(shí)際應(yīng)用中,只要代碼能夠編譯通過,并且功能能完成,那么每一種異常處理方式似乎也都是可以的

運(yùn)行時(shí)異常處理機(jī)制

運(yùn)行時(shí)異常編譯階段不會(huì)出錯(cuò),是運(yùn)行時(shí)才可能出錯(cuò)的,所以編譯階段不處理也可以。

按照規(guī)范建議還是處理:建議在最外層調(diào)用處集中捕獲處理即可。

例如下面代碼, 編譯階段不處理也不會(huì)報(bào)錯(cuò)

public static void main(String[] args) {
    System.out.println("程序開始");
    chu(20, 0);
    System.out.println("程序結(jié)束");
}

public static void chu(int a, int b) {
    System.out.println(a);
    System.out.println(b);
    int c = a / b;
    System.out.println(c);
}

但是按照規(guī)范, 建議還是處理: 運(yùn)行時(shí)異常默認(rèn)會(huì)拋出, 我們只需在方法調(diào)用處捕獲處理異常

public static void main(String[] args) {
    System.out.println("程序開始");
    try {
        chu(20, 0);
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println("程序結(jié)束");
}

public static void chu(int a, int b) {
    System.out.println(a);
    System.out.println(b);
    int c = a / b;
    System.out.println(c);
}

總結(jié)

到此這篇關(guān)于Java中異常處理機(jī)制的文章就介紹到這了,更多相關(guān)Java異常處理機(jī)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文帶你搞懂Java中線程的創(chuàng)建方式

    一文帶你搞懂Java中線程的創(chuàng)建方式

    這篇文章主要為大家詳細(xì)介紹了Java中線程的創(chuàng)建方式的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下
    2023-03-03
  • Java排序算法中的快速排序算法實(shí)現(xiàn)

    Java排序算法中的快速排序算法實(shí)現(xiàn)

    這篇文章主要介紹了Java排序算法中的快速排序算法實(shí)現(xiàn),通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,需要的朋友可以參考下
    2023-12-12
  • Java如何獲取當(dāng)前年份、月份和日期字符串

    Java如何獲取當(dāng)前年份、月份和日期字符串

    Java獲取當(dāng)前年份、月份和日期是通過Calendar類的實(shí)例對(duì)象來獲取的,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • 詳解Spring Retry實(shí)現(xiàn)原理

    詳解Spring Retry實(shí)現(xiàn)原理

    這篇文章主要介紹了詳解Spring Retry實(shí)現(xiàn)原理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04
  • Java函數(shù)式編程(十):收集器

    Java函數(shù)式編程(十):收集器

    這篇文章主要介紹了Java函數(shù)式編程(十):收集器,本文是系列文章的第10篇,其它文章請(qǐng)參閱本文底部的相關(guān)文章,需要的朋友可以參考下
    2014-09-09
  • Java構(gòu)建對(duì)象常用3種方法解析

    Java構(gòu)建對(duì)象常用3種方法解析

    這篇文章主要介紹了Java構(gòu)建對(duì)象常用3種方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 利用Java實(shí)現(xiàn)復(fù)制Excel工作表功能

    利用Java實(shí)現(xiàn)復(fù)制Excel工作表功能

    這篇文章主要給大家介紹了關(guān)于如何利用Java實(shí)現(xiàn)復(fù)制Excel工作表功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Eclipse?IDE中如何設(shè)置JVM啟動(dòng)參數(shù)

    Eclipse?IDE中如何設(shè)置JVM啟動(dòng)參數(shù)

    這篇文章主要介紹了Eclipse?IDE中如何設(shè)置JVM啟動(dòng)參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java的RocketMq水平擴(kuò)展及負(fù)載均衡詳解

    Java的RocketMq水平擴(kuò)展及負(fù)載均衡詳解

    這篇文章主要介紹了Java的RocketMq水平擴(kuò)展及負(fù)載均衡詳解,RocketMQ是一個(gè)分布式具有高度可擴(kuò)展性的消息中間件,本文旨在探索在broker端,生產(chǎn)端,以及消費(fèi)端是如何做到橫向擴(kuò)展以及負(fù)載均衡的,需要的朋友可以參考下
    2024-01-01
  • Java中JUC?的?Exchange?交換器詳情

    Java中JUC?的?Exchange?交換器詳情

    這篇文章主要介紹了Java中JUC?的?Exchange?交換器詳情,文章基于Java的相關(guān)資料展開詳細(xì)的內(nèi)容介紹,需要的小伙伴可以參考一下
    2022-05-05

最新評(píng)論

怀化市| 潜山县| 芜湖市| 伊金霍洛旗| 海南省| 华阴市| 姚安县| 深圳市| 安溪县| 清水河县| 寿光市| 四平市| 正镶白旗| 天气| 普格县| 砀山县| 庄浪县| 金溪县| 丰台区| 贵溪市| 云林县| 东山县| 深水埗区| 彰化市| 诸城市| 榆中县| 盘锦市| 信宜市| 金平| 光山县| 东乡族自治县| 平江县| 镇远县| 阿克陶县| 遂川县| 白银市| 望奎县| 南昌市| 怀集县| 凤凰县| 德钦县|