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

Java常見(jiàn)踩坑記錄之異常處理

 更新時(shí)間:2022年01月12日 09:45:59   作者:jinyangjie0  
程序運(yùn)行時(shí)發(fā)生的不被期望的事件,它阻止了程序按照程序員的預(yù)期正常執(zhí)行,這就是異常,下面這篇文章主要給大家介紹了關(guān)于Java常見(jiàn)踩坑記錄之異常處理的相關(guān)資料,需要的朋友可以參考下

一、Java異常類(lèi)層次結(jié)構(gòu)

Java中,所有的異常都來(lái)源于java.lang包中的Throwable類(lèi),它有兩個(gè)重要的子類(lèi),Exception(異常)和Error(錯(cuò)誤)。

  • Exception :程序本身可以處理的異常,可以通過(guò) catch 來(lái)進(jìn)行捕獲。Exception 又可以分為 受檢查異常(必須處理) 和 不受檢查異常(可以不處理)。
  • Error :Error 屬于程序無(wú)法處理的錯(cuò)誤 ,我們沒(méi)辦法通過(guò) catch 來(lái)進(jìn)行捕獲 。例如,虛擬機(jī)內(nèi)存不夠錯(cuò)誤(OutOfMemoryError)、類(lèi)定義錯(cuò)誤(NoClassDefFoundError)等 。這些異常發(fā)生時(shí),Java 虛擬機(jī)(JVM)一般會(huì)線程終止。

二、Throwable類(lèi)常用方法

  • public String getMessage(): 返回異常發(fā)生時(shí)的簡(jiǎn)要描述
  • public String toString(): 返回異常發(fā)生時(shí)的詳細(xì)信息
  • public String getLocalizedMessage():返回異常對(duì)象的本地化信息。使用 Throwable 的子類(lèi)覆蓋這個(gè)方法,可以生成本地化信息。如果子類(lèi)沒(méi)有覆蓋該方法,則該方法返回的信息與 getMessage()返回的結(jié)果相同
  • public void printStackTrace():在控制臺(tái)上打印 Throwable 對(duì)象封裝的異常信息

三、try-catch-finally

  • try塊: 用于捕獲異常。其后可接零個(gè)或多個(gè) catch 塊,如果沒(méi)有 catch 塊,則必須跟一個(gè) finally 塊。
  • catch塊: 用于處理 try 捕獲到的異常。
  • finally 塊: 無(wú)論是否捕獲或處理異常,finally 塊里的語(yǔ)句都會(huì)被執(zhí)行。當(dāng)在 try 塊或 catch 塊中遇到 return 語(yǔ)句時(shí),finally 語(yǔ)句塊將在方法返回之前被執(zhí)行。

在以下 2種特殊情況下,finally 塊不會(huì)被執(zhí)行:

  • 在 try 或 finally塊中用了 System.exit(int)退出程序。但是,如果 System.exit(int) 在異常語(yǔ)句之后,finally 還是會(huì)被執(zhí)行
  • 程序所在的線程死亡。

代碼示例:

BufferedReader br = null;
try {
    br = new BufferedReader(new FileReader("test.txt"));
    br.readLine();
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if (br != null)
        try {
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
}

四、使用 try-with-resources 來(lái)代替try-catch-finally

1. 適用范圍(資源的定義): 任何實(shí)現(xiàn) java.lang.AutoCloseable 的對(duì)象

2. 關(guān)閉資源和 finally 塊的執(zhí)行順序:try-with-resources 語(yǔ)句中,任何 catch 或 finally 塊在聲明的資源關(guān)閉后運(yùn)行

《Effecitve Java》中明確指出:

面對(duì)必須要關(guān)閉的資源,我們總是應(yīng)該優(yōu)先使用 try-with-resources 而不是try-finally。隨之產(chǎn)生的代碼更簡(jiǎn)短,更清晰,產(chǎn)生的異常對(duì)我們也更有用。try-with-resources語(yǔ)句讓我們更容易編寫(xiě)必須要關(guān)閉的資源的代碼,若采用try-finally則幾乎做不到這點(diǎn)。

將上面的代碼例子改造:

try (BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
    br.readLine();
} catch (Exception e) {
    e.printStackTrace();
}

代碼變得非常簡(jiǎn)潔。

注意:try-with-resource中聲明的變量會(huì)隱式的加上final 關(guān)鍵字,所以無(wú)法再進(jìn)行賦值。

五、自定義異常

在Java中要想創(chuàng)建自定義異常,需要繼承Throwable或者他的子類(lèi)Exception。

因?yàn)楦割?lèi)已經(jīng)把異常信息的操作都完成了,所在子類(lèi)只要在構(gòu)造時(shí),將異常信息傳遞給父類(lèi)通過(guò)super 語(yǔ)句即可。

代碼示例:

public class CustomException extends Exception {

	//無(wú)參構(gòu)造方法
	public CustomException(){
		
		super();
	}
	
	//有參的構(gòu)造方法
	public CustomException(String message){
		super(message);
		
	}
	
	// 用指定的詳細(xì)信息和原因構(gòu)造一個(gè)新的異常
	public CustomException(String message, Throwable cause){
		
		super(message,cause);
	}
	
	//用指定原因構(gòu)造一個(gè)新的異常
	 public CustomException(Throwable cause) {
		 
		 super(cause);
	 }
	
}

按照國(guó)際慣例,自定義的異常應(yīng)該總是包含如下的構(gòu)造函數(shù):

  • 一個(gè)無(wú)參構(gòu)造函數(shù)
  • 一個(gè)帶有String參數(shù)的構(gòu)造函數(shù),并傳遞給父類(lèi)的構(gòu)造函數(shù)。
  • 一個(gè)帶有String參數(shù)和Throwable參數(shù),并都傳遞給父類(lèi)構(gòu)造函數(shù)
  • 一個(gè)帶有Throwable 參數(shù)的構(gòu)造函數(shù),并傳遞給父類(lèi)的構(gòu)造函數(shù)。

finally塊和return

首先一個(gè)不容易理解的事實(shí):在 try塊中即便有return,break,continue等改變執(zhí)行流的語(yǔ)句,finally也會(huì)執(zhí)行。

finally中的return 會(huì)覆蓋 try 或者catch中的返回值。

finally中的return或異常會(huì)抑制(消滅)前面try或者catch塊中的異常。

總結(jié)

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

相關(guān)文章

  • mybatisPlus批量插入優(yōu)化加快性能

    mybatisPlus批量插入優(yōu)化加快性能

    這篇文章主要介紹了mybatisPlus批量插入優(yōu)化加快性能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-12-12
  • Opencv實(shí)現(xiàn)身份證OCR識(shí)別的示例詳解

    Opencv實(shí)現(xiàn)身份證OCR識(shí)別的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何使用Opencv實(shí)現(xiàn)身份證OCR識(shí)別功能,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下
    2024-03-03
  • 淺談springboot自動(dòng)配置原理

    淺談springboot自動(dòng)配置原理

    這篇文章主要介紹了淺談springboot自動(dòng)配置原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Springboot整合pagehelper分頁(yè)功能

    Springboot整合pagehelper分頁(yè)功能

    這篇文章主要為大家詳細(xì)介紹了Springboot整合pagehelper分頁(yè)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Java攔截過(guò)濾器模式 (Intercepting Filter )實(shí)現(xiàn)方法

    Java攔截過(guò)濾器模式 (Intercepting Filter )實(shí)現(xiàn)方法

    攔截過(guò)濾器模式(Intercepting Filter Pattern)用于對(duì)應(yīng)用程序的請(qǐng)求或響應(yīng)做一些預(yù)處理/后處理,本文通過(guò)實(shí)例代碼介紹Java攔截過(guò)濾器模式 (Intercepting Filter )的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Java描述數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之鏈表的增刪改查詳解

    Java描述數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之鏈表的增刪改查詳解

    這篇文章主要給大家介紹了關(guān)于Java描述數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之鏈表的增刪改查的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • java中變量和常量詳解

    java中變量和常量詳解

    這篇文章主要介紹了Java中變量和常量詳解,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Java新手環(huán)境搭建 Tomcat安裝配置教程

    Java新手環(huán)境搭建 Tomcat安裝配置教程

    這篇文章主要為大家詳細(xì)介紹了Java新手環(huán)境搭建的相關(guān)資料,Tomcat安裝配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 使用JPA自定義id策略避免主鍵自增

    使用JPA自定義id策略避免主鍵自增

    這篇文章主要介紹了使用JPA自定義id策略避免主鍵自增問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Kafka是什么及如何使用SpringBoot對(duì)接Kafka(最新推薦)

    Kafka是什么及如何使用SpringBoot對(duì)接Kafka(最新推薦)

    這篇文章主要介紹了Kafka是什么,以及如何使用SpringBoot對(duì)接Kafka,今天我們通過(guò)一個(gè)Demo講解了在SpringBoot中如何對(duì)接Kafka,也介紹了下關(guān)鍵類(lèi)?KafkaTemplate,需要的朋友可以參考下
    2023-11-11

最新評(píng)論

香河县| 天柱县| 大悟县| 衡阳市| 岢岚县| 黄骅市| 巴青县| 湘西| 高尔夫| 璧山县| 沂源县| 平武县| 灌云县| 承德县| 高阳县| 息烽县| 高密市| 扎鲁特旗| 乳山市| 南和县| 莱州市| 奎屯市| 贺州市| 棋牌| 沅陵县| 宽甸| 邯郸县| 普兰店市| 靖宇县| 赣榆县| 临汾市| 伊通| 康乐县| 温泉县| 城口县| 辽源市| 左云县| 河西区| 色达县| 永登县| 黑河市|