91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java注解和異常實例分析

發布時間:2022-06-20 09:17:29 來源:億速云 閱讀:91 作者:iii 欄目:開發技術

今天小編給大家分享一下Java注解和異常實例分析的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

注解

作用

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

  • 生成文檔,通過代碼里標識的元數據生成javadoc文檔。

  • 編譯檢查,通過代碼里標識的元數據讓編譯器在編譯期間進行檢查驗證。

  • 編譯時動態處理,編譯時通過代碼里標識的元數據動態處理,例如動態生成代碼。

  • 運行時動態處理,運行時通過代碼里標識的元數據動態處理,例如使用反射注入實例。

注解的常見分類

  • Java自帶的標準注解,包括@Override@Deprecated@SuppressWarnings,分別用于標明重寫某個方法、標明某個類或方法過時、標明要忽略的警告,用這些注解標明后編譯器就會進行檢查。

  • 元注解,元注解是用于定義注解的注解,包括@Retention@Target@Inherited@Documented

    • @Retention用于標明注解被保留的階段

    • @Target用于標明注解使用的范圍

    • @Inherited用于標明注解可繼承

    • @Documented用于標明是否生成javadoc文檔

  • 自定義注解,可以根據自己的需求定義注解,并可用元注解對自定義注解進行注解。

異常

Java異常類層次結構

  • Throwable 是 Java 語言中所有錯誤與異常的超類。

    • Error 類及其子類:程序中無法處理的錯誤,表示運行應用程序中出現了嚴重的錯誤。

    • Exception 程序本身可以捕獲并且可以處理的異常。Exception 這種異常又分為兩類:運行時異常和編譯時異常。

Java注解和異常實例分析

運行時異常:

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

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

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

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

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

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

正確的程序在運行中,很容易出現的、情理可容的異常狀況。可查異常雖然是異常狀況,但在一定程度上它的發生是可以預計的,而且一旦發生這種異常狀況,就必須采取某種方式進行處理。

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

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

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

throw和throws的區別?

異常的申明(throws):

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

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

異常的拋出(throw):

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

如下所示:

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

Java 7 的 try-with-resource?

如果你的資源實現了 AutoCloseable 接口,你可以使用這個語法。大多數的 Java 標準資源都繼承了這個接口。當你在 try 子句中打開資源,資源會在 try 代碼塊執行后或異常處理后自動關閉。

    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 可能發生異常的起始點

  • to 可能發生異常的結束點

  • target 上述from和to之前發生異常后的異常處理者的位置

  • type 異常處理者處理的異常的類信息

反射

什么是反射?

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

Java注解和異常實例分析

反射的使用

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

Class類對象的獲取:

    @Test
    public void classTest() throws Exception {
        // 獲取Class對象的三種方式
        logger.info("根據類名:  \t" + User.class);
        logger.info("根據對象:  \t" + new User().getClass());
        logger.info("根據全限定類名:\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的區別?

  • getSimpleName:只獲取類名

  • getName:類的全限定名,jvm中Class的表示,可以用于動態加載Class對象,例如Class.forName。

  • getCanonicalName:返回更容易理解的表示,主要用于輸出(toString)或log打印,大多數情況下和getName一樣,但是在內部類、數組等類型的表示形式就不同了。

以上就是“Java注解和異常實例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

灵石县| 海晏县| 城市| 蛟河市| 中牟县| 当雄县| 合作市| 确山县| 庐江县| 盐池县| 常山县| 天柱县| 灵石县| 汉阴县| 临颍县| 崇文区| 江油市| 鄂温| 长汀县| 马龙县| 泗洪县| 保康县| 珠海市| 县级市| 翁牛特旗| 安乡县| 德庆县| 潮安县| 新乡县| 长葛市| 闸北区| 乌拉特中旗| 昂仁县| 南安市| 东台市| 宕昌县| 吴川市| 呼和浩特市| 莎车县| 内江市| 调兵山市|