欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的@SneakyThrows注解詳解

 更新時間:2023年10月07日 11:22:41   作者:Myovlmx  
這篇文章主要介紹了Java中的@SneakyThrows注解詳解,@SneakyThrows將當(dāng)前方法拋出的異常,包裝成RuntimeException,騙過編譯器,使得調(diào)用點可以不用顯示處理異常信息,需要的朋友可以參考下

背景:

? 在 java 的異常體系中 Exception 異常有兩個分支,一個是運行時異常 RuntimeException ,一個是編譯時異常,在 Exception 下的所有非 RuntimeException 異常,比如 IOException 、 SQLException 等;所有的運行時異常不捕獲,編譯時異常是一定要捕獲,否則編譯會報錯。 @SneakyThrows 就是利用了這一機制,將當(dāng)前方法拋出的異常,包裝成 RuntimeException ,騙過編譯器,使得調(diào)用點可以不用顯示處理異常信息。

使用范圍:

只能作用在方法和構(gòu)造函數(shù)之上

原理:

/*
 * 若不使用@SneakyThrows注解,newInsstance方法會要求拋出InstantiationException, 
 * IllegalAccessException異常,且調(diào)用sneakyThrowsTest()的地方需要捕獲這些異常,
 * 加上@SneakyThrows注解之后就不需要捕獲異常信息。
 */
@SneakyThrows
private void sneakyThrowsTest(){
  SneakyThrowsDemo.class.newInstance();
}

如下為反編譯之后的結(jié)果

private void sneakyThrowsTest() {
    try {
      HelloController.class.newInstance();
    } catch (Throwable e) {
      // 調(diào)用Lombok方法轉(zhuǎn)化為RuntimeException
      throw Lombok.sneakyThrow(e);
    }
}
// =========== ombok =========
public static RuntimeException sneakyThrow(Throwable t) {
  if (t == null) {
    throw new NullPointerException("t");
  } else {
    return Lombok.<RuntimeException>sneakyThrow0(t);
  }
}
/*
 * 這個方法是關(guān)鍵,這里對入?yún)㈩愋偷募s束為<T extends Throwable>,將異常強轉(zhuǎn)為T類型
 */
private static <T extends Throwable> T sneakyThrow0(Throwable t) throws T {
  throw (T)t;
}

Error和Exception區(qū)分

  1. Error是編譯時錯誤和系統(tǒng)錯誤,系統(tǒng)錯誤在除特殊情況下,都不需要你來關(guān)心,基本不會出現(xiàn)。而編譯時錯誤,如果你使用了??編譯器??,那么編譯器會提示。
  2. Exception則是可以被拋出的基本類型,我們需要主要關(guān)心的也是這個類。
  3. Exception又分為RunTimeException和其他Exception。

RunTimeException和其他Exception區(qū)分

其他Exception,受檢查異常。可以理解為錯誤,必須要開發(fā)者解決以后才能編譯通過,解決的方法有兩種

  • throw到上層
  •  try-catch處理

RunTimeException:運行時異常,又稱不受檢查異常,不受檢查,因為不受檢查,所以在代碼中可能會有RunTimeException時Java編譯檢查時不會告訴你有這個異常,但是在實際運行代碼時則會暴露出來,比如經(jīng)典的1/0,空指針等。

如果不處理也會被Java自己處理。

到此這篇關(guān)于Java中的@SneakyThrows注解詳解的文章就介紹到這了,更多相關(guān)@SneakyThrows注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot中如何啟動Tomcat流程

    SpringBoot中如何啟動Tomcat流程

    這篇文章主要介紹了SpringBoot中如何啟動Tomcat流程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • 一文帶你了解Java中的函數(shù)式編程

    一文帶你了解Java中的函數(shù)式編程

    函數(shù)式編程的理論基礎(chǔ)是阿隆佐·丘奇(Alonzo Church)于 1930 年代提出的 λ 演算(Lambda Calculus)。這篇文章主要為大家介紹了函數(shù)式編程的相關(guān)知識,希望對大家有所幫助
    2023-04-04
  • Java實現(xiàn)阿里云短信接口的示例

    Java實現(xiàn)阿里云短信接口的示例

    這篇文章主要介紹了Java實現(xiàn)阿里云短信接口的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Spring?data?jpa緩存機制使用總結(jié)

    Spring?data?jpa緩存機制使用總結(jié)

    這篇文章主要介紹了Spring?data?jpa緩存機制使用總結(jié),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java中的StringJoiner類使用示例深入詳解

    Java中的StringJoiner類使用示例深入詳解

    這篇文章主要為大家介紹了Java中的StringJoiner類使用示例深入詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Java面向?qū)ο筇匦陨钊肱傥龇庋b

    Java面向?qū)ο筇匦陨钊肱傥龇庋b

    封裝是一個非常廣泛的概念,小到一個屬性的封裝,大到一個框架或者一個項目的封裝,下面這篇文章主要給大家介紹了關(guān)于java中封裝的那點事,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • Spring Security自定義失敗處理器問題

    Spring Security自定義失敗處理器問題

    這篇文章主要介紹了Spring Security自定義失敗處理器問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Spring?AI使用tool?Calling和MCP的示例詳解

    Spring?AI使用tool?Calling和MCP的示例詳解

    SpringAI1.0.0.M6引入ToolCalling與MCP協(xié)議,提升AI與工具交互的擴展性與標(biāo)準(zhǔn)化,支持信息檢索、行動執(zhí)行等場景,通過統(tǒng)一接口降低開發(fā)成本,實現(xiàn)如星座運勢等復(fù)雜功能的靈活集成,本文給大家介紹Spring?AI使用tool?Calling和MCP的示例,感興趣的朋友一起看看吧
    2025-07-07
  • Java I/O深入學(xué)習(xí)之File和RandomAccessFile

    Java I/O深入學(xué)習(xí)之File和RandomAccessFile

    這篇文章主要介紹了Java I/O深入學(xué)習(xí)之File和RandomAccessFile, I/O系統(tǒng)即輸入/輸出系統(tǒng),對于一門程序語言來說,創(chuàng)建一個好的輸入/輸出系統(tǒng)并非易事。在充分理解Java I/O系統(tǒng)以便正確地運用之前,我們需要學(xué)習(xí)相當(dāng)數(shù)量的類。,需要的朋友可以參考下
    2019-06-06
  • TC?集群Seata1.6高可用架構(gòu)源碼解析

    TC?集群Seata1.6高可用架構(gòu)源碼解析

    這篇文章主要為大家介紹了TC?集群Seata1.6高可用架構(gòu)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12

最新評論