亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java特性之注解和異常?Throwable

 更新時間:2022年06月19日 10:06:36   作者:??W_Kiven????  
這篇文章主要介紹了Java特性之注解和異常,注解是JDK1.5版本開始引入的一個特性,Throwable是Java語言中所有錯誤與異常的超類,文章圍繞主題展開更多的相關(guān)介紹,具有一定的參考價值,需要的小伙伴可以參考一下

注解

作用

注解是JDK1.5版本開始引入的一個特性,用于對代碼進(jìn)行說明,可以對包、類、接口、字段、方法參數(shù)、局部變量等進(jìn)行注解。它主要的作用有以下四方面:

  • 生成文檔,通過代碼里標(biāo)識的元數(shù)據(jù)生成javadoc文檔。
  • 編譯檢查,通過代碼里標(biāo)識的元數(shù)據(jù)讓編譯器在編譯期間進(jìn)行檢查驗證。
  • 編譯時動態(tài)處理,編譯時通過代碼里標(biāo)識的元數(shù)據(jù)動態(tài)處理,例如動態(tài)生成代碼。
  • 運行時動態(tài)處理,運行時通過代碼里標(biāo)識的元數(shù)據(jù)動態(tài)處理,例如使用反射注入實例。

注解的常見分類

  • Java自帶的標(biāo)準(zhǔn)注解,包括@Override、@Deprecated@SuppressWarnings,分別用于標(biāo)明重寫某個方法、標(biāo)明某個類或方法過時、標(biāo)明要忽略的警告,用這些注解標(biāo)明后編譯器就會進(jìn)行檢查。
  • 元注解,元注解是用于定義注解的注解,包括@Retention@Target、@Inherited、@Documented
    • @Retention用于標(biāo)明注解被保留的階段
    • @Target用于標(biāo)明注解使用的范圍
    • @Inherited用于標(biāo)明注解可繼承
    • @Documented用于標(biāo)明是否生成javadoc文檔
  • 自定義注解,可以根據(jù)自己的需求定義注解,并可用元注解對自定義注解進(jìn)行注解。

異常

Java異常類層次結(jié)構(gòu)

  • Throwable 是 Java 語言中所有錯誤與異常的超類。
    • Error 類及其子類:程序中無法處理的錯誤,表示運行應(yīng)用程序中出現(xiàn)了嚴(yán)重的錯誤。
    • Exception 程序本身可以捕獲并且可以處理的異常。Exception 這種異常又分為兩類:運行時異常和編譯時異常。

運行時異常:

都是RuntimeException類及其子類異常,如NullPointerException(空指針異常)、IndexOutOfBoundsException(下標(biāo)越界異常)等,這些異常是不檢查異常,程序中可以選擇捕獲處理,也可以不處理。這些異常一般是由程序邏輯錯誤引起的,程序應(yīng)該從邏輯角度盡可能避免這類異常的發(fā)生。

運行時異常的特點是Java編譯器不會檢查它,也就是說,當(dāng)程序中可能出現(xiàn)這類異常,即使沒有用try-catch語句捕獲它,也沒有用throws子句聲明拋出它,也會編譯通過。

非運行時異常 (編譯異常)

是RuntimeException以外的異常,類型上都屬于Exception類及其子類。從程序語法角度講是必須進(jìn)行處理的異常,如果不處理,程序就不能編譯通過。如IOException、SQLException等以及用戶自定義的Exception異常,一般情況下不自定義檢查異常。

可查的異常(checked exceptions)和不可查的異常(unchecked exceptions)區(qū)別

可查異常(編譯器要求必須處置的異常):

正確的程序在運行中,很容易出現(xiàn)的、情理可容的異常狀況??刹楫惓km然是異常狀況,但在一定程度上它的發(fā)生是可以預(yù)計的,而且一旦發(fā)生這種異常狀況,就必須采取某種方式進(jìn)行處理。

除了RuntimeException及其子類以外,其他的Exception類及其子類都屬于可查異常。這種異常的特點是Java編譯器會檢查它,也就是說,當(dāng)程序中可能出現(xiàn)這類異常,要么用try-catch語句捕獲它,要么用throws子句聲明拋出它,否則編譯不會通過。

不可查異常(編譯器不要求強制處置的異常)

包括運行時異常(RuntimeException與其子類)和錯誤(Error)。

throw和throws的區(qū)別?

異常的申明(throws):

在Java中,當(dāng)前執(zhí)行的語句必屬于某個方法,Java解釋器調(diào)用main方法執(zhí)行開始執(zhí)行程序。若方法中存在檢查異常,如果不對其捕獲,那必須在方法頭中顯式聲明該異常,以便于告知方法調(diào)用者此方法有異常,需要進(jìn)行處理。 在方法中聲明一個異常,方法頭中使用關(guān)鍵字throws,后面接上要聲明的異常。若聲明多個異常,則使用逗號分割。如下所示:

public static void method() throws IOException, FileNotFoundException{ //something statements }

異常的拋出(throw):

如果代碼可能會引發(fā)某種錯誤,可以創(chuàng)建一個合適的異常類實例并拋出它,這就是拋出異常。

如下所示:

public static double method(int value) { if(value == 0) { throw new ArithmeticException("參數(shù)不能為0"); //拋出一個運行時異常 } return 5.0 / value; }

Java 7 的 try-with-resource?

如果你的資源實現(xiàn)了 AutoCloseable 接口,你可以使用這個語法。大多數(shù)的 Java 標(biāo)準(zhǔn)資源都繼承了這個接口。當(dāng)你在 try 子句中打開資源,資源會在 try 代碼塊執(zhí)行后或異常處理后自動關(guān)閉。

    File file = new File("./tmp.txt");
    try (FileInputStream inputStream = new FileInputStream(file);) {
        // use the inputStream to read a file
    } catch (FileNotFoundException e) {
        log.error(e);
    } catch (IOException e) {
        log.error(e);
    }
}

異常的底層?

提到JVM處理異常的機制,就需要提及Exception Table,以下稱為異常表。我們暫且不急于介紹異常表,先看一個簡單的 Java 處理異常的小例子。

   try {
       testNPE();
   } catch (Exception e) {
       e.printStackTrace();
   }
}

異常表中包含了一個或多個異常處理者(Exception Handler)的信息,這些信息包含如下

  • from 可能發(fā)生異常的起始點
  • to 可能發(fā)生異常的結(jié)束點
  • target 上述from和to之前發(fā)生異常后的異常處理者的位置
  • type 異常處理者處理的異常的類信息

反射

什么是反射?

JAVA反射機制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法和屬性;這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為java語言的反射機制。

反射的使用

在Java中,Class類與java.lang.reflect類庫一起對反射技術(shù)進(jìn)行了全力的支持。在反射包中,我們常用的類主要有Constructor類表示的是Class 對象所表示的類的構(gòu)造方法,利用它可以在運行時動態(tài)創(chuàng)建對象、Field表示Class對象所表示的類的成員變量,通過它可以在運行時動態(tài)修改成員變量的屬性值(包含private)、Method表示Class對象所表示的類的成員方法,通過它可以動態(tài)調(diào)用對象的方法(包含private)

Class類對象的獲?。?/strong>

    @Test
    public void classTest() throws Exception {
        // 獲取Class對象的三種方式
        logger.info("根據(jù)類名:  \t" + User.class);
        logger.info("根據(jù)對象:  \t" + new User().getClass());
        logger.info("根據(jù)全限定類名:\t" + Class.forName("com.test.User"));
        // 常用的方法
        logger.info("獲取全限定類名:\t" + userClass.getName());
        logger.info("獲取類名:\t" + userClass.getSimpleName());
        logger.info("實例化:\t" + userClass.newInstance());
    }
  • Constructor類及其用法
  • Field類及其用法
  • Method類及其用法

getName、getCanonicalName與getSimpleName的區(qū)別?

  • getSimpleName:只獲取類名
  • getName:類的全限定名,jvm中Class的表示,可以用于動態(tài)加載Class對象,例如Class.forName。
  • getCanonicalName:返回更容易理解的表示,主要用于輸出(toString)或log打印,大多數(shù)情況下和getName一樣,但是在內(nèi)部類、數(shù)組等類型的表示形式就不同了。

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

相關(guān)文章

  • MyBatis動態(tài)SQL foreach標(biāo)簽實現(xiàn)批量插入的方法示例

    MyBatis動態(tài)SQL foreach標(biāo)簽實現(xiàn)批量插入的方法示例

    這篇文章主要介紹了MyBatis動態(tài)SQL foreach標(biāo)簽實現(xiàn)批量插入的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • @PathVariable和@RequestParam傳參為空問題及解決

    @PathVariable和@RequestParam傳參為空問題及解決

    這篇文章主要介紹了@PathVariable和@RequestParam傳參為空問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java程序部署到服務(wù)器上,接口請求下載文件失敗/文件為空/文件名不對的問題

    Java程序部署到服務(wù)器上,接口請求下載文件失敗/文件為空/文件名不對的問題

    這篇文章主要介紹了Java程序部署到服務(wù)器上,接口請求下載文件失敗/文件為空/文件名不對,本文給大家分享錯誤原因及解決方法,需要的朋友可以參考下
    2020-07-07
  • Java簡單實現(xiàn)猜數(shù)字游戲附C語言版本

    Java簡單實現(xiàn)猜數(shù)字游戲附C語言版本

    猜數(shù)字是興起于英國的益智類小游戲,起源于20世紀(jì)中期,一般由兩個人或多人玩,也可以由一個人和電腦玩。游戲規(guī)則為一方出數(shù)字,一方猜,今天我們來用Java和C語言分別把這個小游戲?qū)懗鰜砭毦毷?/div> 2021-11-11
  • java版十大排序經(jīng)典算法:完整代碼

    java版十大排序經(jīng)典算法:完整代碼

    優(yōu)秀的文章也不少,但是Java完整版的好像不多,我把所有的寫一遍鞏固下,同時也真誠的希望閱讀到這篇文章的小伙伴們可以自己去從頭敲一遍,不要粘貼復(fù)制!希望我的文章對你有所幫助,每天進(jìn)步一點點
    2021-07-07
  • HttpClient基礎(chǔ)解析

    HttpClient基礎(chǔ)解析

    這篇文章主要介紹了HttpClient基礎(chǔ)知識,算是比較詳細(xì)地對知識點和相關(guān)實例進(jìn)行解釋,需要的朋友可以參考下
    2017-09-09
  • springboot 配置日志 打印不出來sql的解決方法

    springboot 配置日志 打印不出來sql的解決方法

    這篇文章主要介紹了springboot 配置日志 打印不出來sql的解決方法,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-11-11
  • MyBatis中select語句中使用String[]數(shù)組作為參數(shù)的操作方法

    MyBatis中select語句中使用String[]數(shù)組作為參數(shù)的操作方法

    在 MyBatis 中,如何在 mapper.xml 配置文件中 select 語句中使用 String[] 數(shù)組作為參數(shù)呢,并且使用IN關(guān)鍵字來匹配數(shù)據(jù)庫中的記錄,這篇文章主要介紹了MyBatis中select語句中使用String[]數(shù)組作為參數(shù),需要的朋友可以參考下
    2023-12-12
  • 合并有序數(shù)組的實現(xiàn)(java與C語言)

    合并有序數(shù)組的實現(xiàn)(java與C語言)

    這篇文章主要介紹了合并有序數(shù)組的實現(xiàn)(java與C語言)的相關(guān)資料,這里對有序數(shù)組的合并分享了java版本和C語言版本的示例,需要的朋友可以參考下
    2017-08-08
  • java 解析user-agent 信息

    java 解析user-agent 信息

    這篇文章主要介紹了java 解析http user-agent的信息的相關(guān)資料,需要的朋友可以參考下
    2016-07-07

最新評論