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

淺談拋出異常和捕獲異常的一些區(qū)別

 更新時(shí)間:2021年06月07日 11:44:52   作者:lzqze  
這篇文章主要介紹了拋出異常和捕獲異常的一些區(qū)別,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

小總結(jié)

拋出異常:

創(chuàng)建異常對象,封裝異常信息然后通過throw將異常對象傳遞給調(diào)用者。

不對異常進(jìn)行處理只對異常進(jìn)行拋出是非常不負(fù)責(zé)任的表現(xiàn)可以稱為渣男。

但是可以通過主動(dòng)拋出異常對一些jvm虛擬機(jī)識別不出來的異常進(jìn)行拋出。

手動(dòng)拋出異常舉例

public static void main(String[] args) throws Exception {
        int age = 0;
        age = -100;
        if(age<0)
        {
            Exception e = new Exception();//創(chuàng)建異常對象
            throw e;//拋出異常
        }
        System.out.println(age);
    }

這個(gè)例子在常理中年齡是不能小于零的所以要手動(dòng)拋出異常。

捕獲異常:

對異常進(jìn)行捕獲然后進(jìn)行指定方式的處理

throw與throws的區(qū)別:

1.拋出的東西不同:throw拋出的是具體的異常對象,而throws拋出的是抽象的異常類。

2.使用位置不同:throw一般用在方法體中,也可用在代碼塊中,throws只能用在方法聲明括號后面。

Java中的異常處理:何時(shí)拋出異常,何時(shí)捕獲異常?

在看hadoop源碼時(shí),想想自己最近在做的那個(gè)系統(tǒng),發(fā)現(xiàn)很多異常處理的方式不對,還是按照傳統(tǒng)的異常處理方式(即:采用返回值來標(biāo)識程序出現(xiàn)的異常情況)。而hadoop中很多方法的聲明是有異常拋出的,而我的系統(tǒng)中的很多方法的聲明都沒有拋出異常。只是判斷了異常情況,并輸出了錯(cuò)誤提示,但是并沒有拋出異常。

org.apache.hadoop.hdfs.protocol包下的Block類的readFields()方法:

public void readFields(DataInput in) throws IOException {
    this.blockId = in.readLong();
    this.numBytes = in.readLong();
    this.generationStamp = in.readLong();
    if (numBytes < 0) {
      throw new IOException("Unexpected block size: " + numBytes);//拋出異常,要是的話就不會拋出,而只是System.out.println錯(cuò)誤提示,
    }

1.如果方法聲明名里面有throws異常,那么方法體里面可以不拋出異常。

因?yàn)榭梢栽诜椒暶髦邪惓Uf明,但實(shí)際上卻不拋出!這樣做的好處是,為異常先占個(gè)位置,以后就可以拋出這種異常而不用修改修改已有的代碼。在定義抽象基類和接口時(shí)這種能力很重要,這樣派生類或接口實(shí)現(xiàn)類就能夠拋出這些預(yù)先聲明的異常。

2.為什么有的方法聲明里面沒有throws,但方法體里面卻拋出了異常?

從RuntimeException繼承的異常,可以在沒有異常說明throws的情況下被拋出!對于Runtime異常(也稱為非檢查的異常unchecked exception),編譯器不需要異常說明。只能在代碼中忽略RuntimeException(及其子類)類型的異常,其他類型的異常的處理都是由編譯器強(qiáng)制實(shí)施的。究其原因,RuntimeException代表的是編程錯(cuò)誤。

3.運(yùn)行時(shí)異常會被Java虛擬機(jī)自動(dòng)拋出!

1. 異常處理基礎(chǔ)

1.1 System.out.println是高代價(jià)的。調(diào)用System.out.println會降低系統(tǒng)吞吐量。

1.2 在生產(chǎn)環(huán)境中別用異常的printStackTrace()方法。printStackTrace默認(rèn)會把調(diào)用的堆棧打印到控制臺上,在生產(chǎn)環(huán)境中訪問控制臺是不現(xiàn)實(shí)的。

2. 異常處理基本原則

2.1 如果你不能處理異常,不要捕獲該異常。

2.2 如果要捕獲,應(yīng)在離異常源近的地方捕獲它。

2.3 不要吞沒你捕獲的異常。

*(就是捕獲的異常,但是什么也不做)

2.4 除非你要重新拋出異常,否則把它log起來。

2.5 當(dāng)一個(gè)異常被重新包裝,然后重新拋出的時(shí)候,不要打印statck trace。

2.6 用自定義的異常類,不要每次需要拋出異常的時(shí)候都拋出java.lang.Exception。方法的調(diào)用者可以通過throws知道有哪些異常需要處理--所以它是自我描述的。

2.7 如果你編寫業(yè)務(wù)邏輯,對于終端用戶無法修復(fù)的錯(cuò)誤,系統(tǒng)應(yīng)該拋出非檢查的異常(unchecked exception);如果你編寫一個(gè)第三方的包給其他的開發(fā)人員用,對于不可修復(fù)的錯(cuò)誤要用需要檢查的異常(checked exception)。

2.8 絕對不要因?yàn)閷憈hrows語句會讓你用起來不舒服,而不聲明需要檢查的異常。

2.9 應(yīng)用級別的錯(cuò)誤或不可修復(fù)的系統(tǒng)異常用非檢查的異常(unchecked exception)拋出。

*(注意是錯(cuò)誤,意味著不可修復(fù),比如配置文件錯(cuò)誤)

2.10 根據(jù)異常的粒度組織你的方法

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • swagger2和knife4j的詳細(xì)使用教程(入門級)

    swagger2和knife4j的詳細(xì)使用教程(入門級)

    最近項(xiàng)目中用到了Swagger2和knife4j作為接口文檔,所以下面這篇文章主要給大家介紹了關(guān)于swagger2和knife4j的詳細(xì)使用教程,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • 基于SSM?集成?Freemarker模板引擎的方法

    基于SSM?集成?Freemarker模板引擎的方法

    這篇文章主要介紹了SSM?集成?Freemarker模板引擎,SSM?架構(gòu)下一般采用?Freemarker,Spring?Boot?架構(gòu)下一般推薦采用?Thymeleaf?模板引擎,需要的朋友可以參考下
    2022-01-01
  • 關(guān)于Java繼承中父類和子類構(gòu)造函數(shù)的問題

    關(guān)于Java繼承中父類和子類構(gòu)造函數(shù)的問題

    這篇文章主要介紹了關(guān)于Java繼承中父類和子類構(gòu)造函數(shù)的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Java平閏年判斷的方法總結(jié)

    Java平閏年判斷的方法總結(jié)

    本篇文章給大家整理了Java平閏年判斷的兩種方法,大家在寫程序的時(shí)候如果用的到參考下吧。
    2018-02-02
  • Java監(jiān)聽POST請求的示例詳解

    Java監(jiān)聽POST請求的示例詳解

    要監(jiān)聽POST請求,我們可以使用Java中的HttpServlet類,以下是一個(gè)使用Servlet API監(jiān)聽POST請求的完整示例,通過代碼示例講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-12-12
  • 深入學(xué)習(xí)java8?中的CompletableFuture

    深入學(xué)習(xí)java8?中的CompletableFuture

    本文主要介紹了java8中的CompletableFuture,CompletableFuture實(shí)現(xiàn)了CompletionStage接口和Future接口,前者是對后者的一個(gè)擴(kuò)展,增加了異步回調(diào)、流式處理、多個(gè)Future組合處理的能力,使Java在處理多任務(wù)的協(xié)同工作時(shí)更加順暢便利,下文需要的朋友可以參考一下
    2022-05-05
  • jvm調(diào)優(yōu)的幾種場景(小結(jié))

    jvm調(diào)優(yōu)的幾種場景(小結(jié))

    本文主要介紹了jvm調(diào)優(yōu)的幾種場景,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Spring中的Schedule動(dòng)態(tài)添加修改定時(shí)任務(wù)詳解

    Spring中的Schedule動(dòng)態(tài)添加修改定時(shí)任務(wù)詳解

    這篇文章主要介紹了Spring中的Schedule動(dòng)態(tài)添加修改定時(shí)任務(wù)詳解,可能有人會問,為啥不用Quartz,Quartz自然是非常方便強(qiáng)大的,但不是本篇要講的內(nèi)容,本篇就偏要使用SpringSchedule來實(shí)現(xiàn)動(dòng)態(tài)的cron表達(dá)式任務(wù),需要的朋友可以參考下
    2023-11-11
  • Spring Boot 如何解決富文本上傳圖片跨域問題

    Spring Boot 如何解決富文本上傳圖片跨域問題

    這篇文章主要介紹了Spring Boot 如何解決富文本上傳圖片跨域問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java中的數(shù)組流ByteArrayOutputStream用法

    Java中的數(shù)組流ByteArrayOutputStream用法

    Java中的ByteArrayOutputStream是java.io包中的一個(gè)類,用于在內(nèi)存中創(chuàng)建字節(jié)數(shù)組緩沖區(qū),支持動(dòng)態(tài)擴(kuò)展,它繼承自O(shè)utputStream,允許以字節(jié)形式寫入數(shù)據(jù),無需與外部設(shè)備交互,常用方法包括write()、toByteArray()、toString()等
    2024-09-09

最新評論

汉川市| 敦煌市| 遂宁市| 永胜县| 古交市| 鄄城县| 巢湖市| 安远县| 进贤县| 芒康县| 三亚市| 泸溪县| 阳西县| 平潭县| 洱源县| 陇川县| 南雄市| 昔阳县| 宁津县| 民丰县| 商都县| 武威市| 合阳县| 旺苍县| 抚松县| 丰城市| 五指山市| 上高县| 凤城市| 南陵县| 宁晋县| 封丘县| 米易县| 多伦县| 团风县| 龙口市| 安国市| 绍兴市| 吉木萨尔县| 叶城县| 金塔县|