<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何優(yōu)雅的實(shí)現(xiàn) try/catch 異常塊?

          共 2053字,需瀏覽 5分鐘

           ·

          2020-08-04 21:41

          Java技術(shù)棧

          www.javastack.cn

          關(guān)注閱讀更多優(yōu)質(zhì)文章



          來源:小明的學(xué)習(xí)筆記博客
          地址:www.cnblogs.com/liruilong/p/13403963.html
          在項(xiàng)目中,我們會(huì)遇到異常處理,對于運(yùn)行時(shí)異常,需要我們自己判斷處理。對于受檢異常,需要我們主動(dòng)處理。

          但是繁瑣的try{}catch嵌套在代碼里,看著很不舒服,這里我們不討論性能,就代碼來講,來看看如何將他隱藏起來。原理是不變的。變得是寫法。下面我們來看如何優(yōu)雅的處理異常塊。

          在這之前。你需要知道以下幾個(gè)概念:

          • 行為參數(shù)化:

          • 是java8提出的,函數(shù)式編程的一種思想,通過把代碼包裝為參數(shù)傳遞行為,即把代碼邏輯包裝為一個(gè)參數(shù),傳到方法里,Java8系列新特性教程可以關(guān)注公眾號Java技術(shù)棧搜索閱讀。

          • Lambda表達(dá)式:

          • java8提出:Lambda表達(dá)式理解為簡潔的表示可傳遞的匿名函數(shù)的一種方式,它沒有名稱,但它有函數(shù)體,參數(shù)列表,返回類型。可以拋出一個(gè)異常類型。包裝代碼邏輯為參數(shù)即使用Lambda表達(dá)式。

          • 函數(shù)式接口:

          • 本質(zhì)上是只有一個(gè)抽象方法的普通接口,可以被隱式的轉(zhuǎn)換為Lambda表達(dá)式,需要用注解定義(@FunctionalInterface)。默認(rèn)方法和靜態(tài)方法可以不屬于抽象方法,可以在函數(shù)式接口中定義。

          如果函數(shù)式接口中額外定義多個(gè)抽象方法,那么這些抽象方法簽名必須和Object的public方法一樣,接口最終有確定的類實(shí)現(xiàn), 而類的最終父類是Object。因此函數(shù)式接口可以定義Object的public方法。

          這句代碼想來小伙伴都不陌生。這是一個(gè)受檢異常,需要拋出一個(gè)ClassNotFoundException。

          正常的寫法:

          嗯,我們來看具體的實(shí)現(xiàn):很簡單,我們要做的,即把`Class clazz = Class.forName("類名");`當(dāng)做一種行為去處理,接受一個(gè)String ,得到一個(gè)Class,所以我們要定義一個(gè)函數(shù)接口,描述這種行為。

          這里,因?yàn)槲覀兊男袨樾枰獟伋霎惓?。所以在接口里也拋出異常。關(guān)于異常的最佳處理這里不介紹了,詳細(xì)看下這篇《Java 編程中關(guān)于異常處理的 10 個(gè)最佳實(shí)踐》。

          然后,我們需要定義一個(gè)方法,將我們的行為作為參數(shù)傳進(jìn)去,同時(shí),捕獲一下我們的異常。

          然后,我們可以調(diào)用我們的方法classFind方法,

          當(dāng)然。其實(shí)這種思想并不簡單的可以做捕獲異常的處理,

          我們來看一個(gè)Demo->文本文件轉(zhuǎn)換為字符串:

          在我看來;將文本文件轉(zhuǎn)換為字符串,我們需要使用高級流包裝低級流,然后做緩存讀出來。這里,我們不可避免的會(huì)遇到異常處理,流的關(guān)閉等操作,下面我們將這些代碼都異常起來。專心寫讀的邏輯即可。

          我的思路:

          我對java IO用的不是很熟,大家有好的方法請留言,相互學(xué)習(xí):

          FileInputStream?fileInputStream?=?new?FileInputStream(file))
          ?
          InputStreamReader?inputStreamReader?=?new?InputStreamReader(fileInputStream))
          ?
          BufferedReader?bufferedReader?=?new?BufferedReader(inputStreamReader))
          ?
          String?str?=?bufferedReader.readLine()

          字節(jié)流-》字符流-》字符緩存流 即 將字節(jié)流轉(zhuǎn)換為字符流之后在用高級流包裝。

          所以我的思路是避免在邏輯里出現(xiàn)太多的IO流關(guān)閉,和異常捕獲,專心處理讀取邏輯即可,結(jié)合以下兩種技術(shù):

          執(zhí)一個(gè)行為,任何BufferReader -> String的Lambda表達(dá)式都可以作為參數(shù)傳入。只要符合peocess方法的簽名即可。

          執(zhí)行

          加油,愿被這世界溫柔以待 ^_^

          最近熱文:
          1、同事寫了個(gè)隱藏 bug,我排查了 3 天!
          2、Spring Boot 太狠了,一次發(fā)布 3 個(gè)版本!
          3、Spring Boot Redis 實(shí)現(xiàn)分布式鎖,真香!
          4、Spring Boot 如何快速集成 Redis?
          5、Java 14 祭出神器,Lombok 被干掉了?
          6、盤點(diǎn) 6 個(gè)被淘汰的 Java 技術(shù),曾經(jīng)風(fēng)光過!
          7、Spring Boot 2.3 優(yōu)雅關(guān)閉新姿勢,真香!
          8、Spring Boot 干掉了 Maven 擁抱 Gradle!
          9、公司來了個(gè)新同事不會(huì)用 Lombok!
          10、Spring Cloud 2020 版本重大變革!
          掃碼關(guān)注Java技術(shù)棧公眾號閱讀更多干貨。

          點(diǎn)擊「閱讀原文」獲取面試題大全~

          瀏覽 37
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美肉丝袜videos办公室 | 大香蕉伊人成人电影 | 亚欧黄色 | 91探花精品偷拍在线播放 | 4438全国成人网 |