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

Java中的@SneakyThrows注解詳解

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

背景:

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

使用范圍:

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

原理:

/*
 * 若不使用@SneakyThrows注解,newInsstance方法會(huì)要求拋出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);
  }
}
/*
 * 這個(gè)方法是關(guān)鍵,這里對(duì)入?yún)㈩愋偷募s束為<T extends Throwable>,將異常強(qiáng)轉(zhuǎn)為T類型
 */
private static <T extends Throwable> T sneakyThrow0(Throwable t) throws T {
  throw (T)t;
}

Error和Exception區(qū)分

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

RunTimeException和其他Exception區(qū)分

其他Exception,受檢查異常??梢岳斫鉃殄e(cuò)誤,必須要開發(fā)者解決以后才能編譯通過,解決的方法有兩種

  • throw到上層
  •  try-catch處理

RunTimeException:運(yùn)行時(shí)異常,又稱不受檢查異常,不受檢查,因?yàn)椴皇軝z查,所以在代碼中可能會(huì)有RunTimeException時(shí)Java編譯檢查時(shí)不會(huì)告訴你有這個(gè)異常,但是在實(shí)際運(yùn)行代碼時(shí)則會(huì)暴露出來,比如經(jīng)典的1/0,空指針等。

如果不處理也會(huì)被Java自己處理。

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

相關(guān)文章

  • 集合框架(Collections Framework)詳解及代碼示例

    集合框架(Collections Framework)詳解及代碼示例

    這篇文章主要介紹了集合框架(Collections Framework)詳解及代碼示例,文章涉及集合數(shù)組的區(qū)別,collection接口,iterator迭代器,list接口及其用法,LinkedHashSet集合等有關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • HashMap在JDK7與JDK8中的實(shí)現(xiàn)過程解析

    HashMap在JDK7與JDK8中的實(shí)現(xiàn)過程解析

    這幾天學(xué)習(xí)了HashMap的底層實(shí)現(xiàn),但是發(fā)現(xiàn)好幾個(gè)版本的,代碼不一,很多文章都是舊版本JDK1.6.JDK1.7的?,F(xiàn)在我來分析下JDK7與JDK8中HashMap的實(shí)現(xiàn)過程
    2021-09-09
  • Java中system.exit(0) 和 system.exit(1)區(qū)別

    Java中system.exit(0) 和 system.exit(1)區(qū)別

    本文主要介紹了Java中system.exit(0) 和 system.exit(1)區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • java實(shí)現(xiàn)一個(gè)簡單TCPSocket聊天室功能分享

    java實(shí)現(xiàn)一個(gè)簡單TCPSocket聊天室功能分享

    這篇文章主要為大家分享了java實(shí)現(xiàn)的一個(gè)簡單TCPSocket聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • java如何給對(duì)象按照字符串屬性進(jìn)行排序

    java如何給對(duì)象按照字符串屬性進(jìn)行排序

    這篇文章主要介紹了java如何給對(duì)象按照字符串屬性進(jìn)行排序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • spring中的注解@@Transactional失效的場景代碼演示

    spring中的注解@@Transactional失效的場景代碼演示

    這篇文章主要介紹了spring中的注解@@Transactional失效的場景代碼演示,@Transactional注解是Spring框架提供的用于聲明事務(wù)的注解,作用于類和方法上,需要的朋友可以參考下
    2024-01-01
  • Java中如何判斷線程池任務(wù)已執(zhí)行完成

    Java中如何判斷線程池任務(wù)已執(zhí)行完成

    這篇文章主要介紹了Java中如何判斷線程池任務(wù)已執(zhí)行完成,文章圍繞主題展開詳細(xì)相關(guān)資料,具有一定的參考價(jià)值需要的小伙伴可以參考以參考一下
    2022-05-05
  • SpringBoot實(shí)現(xiàn)物品收藏功能

    SpringBoot實(shí)現(xiàn)物品收藏功能

    這篇文章主要介紹了SpringBoot實(shí)現(xiàn)物品收藏功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • SpringBoot控制器返回值處理的4個(gè)技巧分享

    SpringBoot控制器返回值處理的4個(gè)技巧分享

    在SpringBoot應(yīng)用開發(fā)中,控制器(Controller)的返回值處理是一個(gè)基礎(chǔ)但極其重要的環(huán)節(jié),本文將介紹SpringBoot中四種常用的控制器返回值處理技巧,有需要的可以參考下
    2025-05-05
  • idea導(dǎo)入項(xiàng)目框架的詳細(xì)操作方法

    idea導(dǎo)入項(xiàng)目框架的詳細(xì)操作方法

    大家使用idea開發(fā)工具時(shí)經(jīng)常會(huì)需要導(dǎo)入項(xiàng)目框架,糾結(jié)該怎么操作呢,今天小編給大家分享一篇圖文教程,幫助大家解決idea導(dǎo)入項(xiàng)目框架的問題,感興趣的朋友一起看看吧
    2021-05-05

最新評(píng)論

平顺县| 孝昌县| 北辰区| 旌德县| 攀枝花市| 满城县| 久治县| 揭西县| 通城县| 武强县| 衡南县| 河津市| 泸溪县| 中阳县| 安岳县| 崇文区| 新泰市| 遵义市| 静海县| 松阳县| 民乐县| 宣汉县| 察隅县| 四子王旗| 马边| 巍山| 塔河县| 贵溪市| 上高县| 治县。| 岐山县| 乐都县| 华池县| 洪洞县| 鄂伦春自治旗| 宜丰县| 莆田市| 西林县| 富蕴县| 吴旗县| 田东县|