亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2023年01月18日 10:43:18   作者:學(xué)全棧的灌湯包  
異??赡苁窃诔绦驁?zhí)行過(guò)程中產(chǎn)生的,也可能是程序中throw主動(dòng)拋出的,下面這篇文章主要給大家介紹了關(guān)于Java中異常處理機(jī)制的相關(guān)資料,文中通過(guò)實(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ù)代碼沒(méi)有機(jī)會(huì)執(zhí)行了,因?yàn)槌绦蛞呀?jīng)死亡。

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

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

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

編譯時(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可以捕獲處理一切異常類型, 通過(guò)Exception使用一個(gè)catch塊!

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

異常處理方式三

前兩者結(jié)合: 方法直接將異通過(guò)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ī)范來(lái)說(shuō)第三種方式是最好的:底層的異常拋出去給最外層,最外層集中捕獲處理。

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

運(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)文章

  • Mapper類中存在名稱相同的方法重載報(bào)錯(cuò)問(wèn)題

    Mapper類中存在名稱相同的方法重載報(bào)錯(cuò)問(wèn)題

    這篇文章主要介紹了Mapper類中存在名稱相同的方法重載報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • IDEA自定義常用代碼塊及自定義快捷摸板

    IDEA自定義常用代碼塊及自定義快捷摸板

    這篇文章主要介紹了IDEA自定義常用代碼塊及自定義快捷摸板的相關(guān)知識(shí),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-09-09
  • Java中的線程池如何實(shí)現(xiàn)線程復(fù)用

    Java中的線程池如何實(shí)現(xiàn)線程復(fù)用

    這篇文章主要介紹了Java中的線程池如何實(shí)現(xiàn)線程復(fù)用問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • java web過(guò)濾器處理亂碼

    java web過(guò)濾器處理亂碼

    本文主要介紹了java web過(guò)濾器處理亂碼的方法解析。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-04-04
  • Java中類的加載順序剖析(常用于面試題)

    Java中類的加載順序剖析(常用于面試題)

    這篇文章主要介紹了Java中類的加載順序剖析(常用于面試題),本文直接給出代碼實(shí)例和運(yùn)行結(jié)果,給后給出了加載過(guò)程總結(jié),需要的朋友可以參考下
    2015-03-03
  • springboot清除字符串前后空格與防xss攻擊方法

    springboot清除字符串前后空格與防xss攻擊方法

    這篇文章主要介紹了springboot清除字符串前后空格與防xss攻擊方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java常用字節(jié)流和字符流實(shí)例匯總

    Java常用字節(jié)流和字符流實(shí)例匯總

    這篇文章主要介紹了Java常用字節(jié)流和字符流實(shí)例匯總,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Hibernate中l(wèi)oad方法與get方法的區(qū)別

    Hibernate中l(wèi)oad方法與get方法的區(qū)別

    Hibernate中有兩個(gè)極為相似的方法get()與load(),他們都可以通過(guò)指定的實(shí)體類與ID從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù),并返回對(duì)應(yīng)的實(shí)例,但Hibernate不會(huì)搞兩個(gè)完全一樣的方法的
    2016-01-01
  • Java實(shí)例化一個(gè)抽象類對(duì)象的方法教程

    Java實(shí)例化一個(gè)抽象類對(duì)象的方法教程

    大家都知道抽象類無(wú)法實(shí)例化,就無(wú)法創(chuàng)建對(duì)象。所以下面這篇文章主要給大家介紹了關(guān)于Java實(shí)例化一個(gè)抽象類對(duì)象的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • 淺談springMVC中controller的幾種返回類型

    淺談springMVC中controller的幾種返回類型

    這篇文章主要介紹了淺談springMVC中controller的幾種返回類型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02

最新評(píng)論