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

帶你全面認識Java中的異常處理

 更新時間:2022年12月26日 10:38:33   作者:學(xué)全棧的灌湯包  
在你所寫過的代碼中,你已經(jīng)接觸過一些異常了,我們可以通過一些簡單的代碼讓我們理解一些簡單的異常,下面這篇文章主要給大家介紹了關(guān)于Java中異常處理的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下

Java異常處理

異常體系的介紹

什么事異常處理?

異常是程序在“編譯”或者“執(zhí)行”的過程中可能出現(xiàn)的問題,比如: 數(shù)組索引越界、空指針異常、 日期格式化異常,等…

注意:語法錯誤不算在異常體系中。

為什么要學(xué)習(xí)異常?

異常一旦出現(xiàn)了,如果沒有提前處理,程序就會退出JVM虛擬機而終止.

研究異常是為了避免異常,然后提前處理異常,體現(xiàn)的是程序的安全, 健壯性。

Error:是系統(tǒng)級別問題、JVM退出等,代碼無法控制。

Exception:java.lang包下,稱為異常類,它表示程序本身可以處理的問題

RuntimeException及其子類:統(tǒng)稱為運行時異常,編譯階段不會報錯。 (空指針異常,數(shù)組索引越界異常)除RuntimeException之外所有的異常:統(tǒng)稱為編譯時異常,編譯期必須處理的,否則程序不能通過編譯。 (日期格式化異常)。

編譯時異常和運行時異常:

簡單來說:

編譯時異常就是在編譯的時候出現(xiàn)的異常,

運行時異常就是在運行時出現(xiàn)的異常。

常見運行時異常

運行時異常;

直接繼承自RuntimeException或者其子類,編譯階段不會報錯,運行時可能出現(xiàn)的錯誤。

常見的運行時異常示例:

數(shù)組索引越界異常: ArrayIndexOutOfBoundsException

public static void main(String[] args) {
    // 數(shù)組索引越界異常: ArrayIndexOutOfBoundsException
    int[] arr = {10, 20, 40};
    System.out.println(arr[0]);
    System.out.println(arr[1]);
    System.out.println(arr[2]);
    System.out.println(arr[3]); // 越界

    // 異常提示: 
    // Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
    //	at com.chenyq.d6_exception.ExceptionDemo.main(ExceptionDemo.java:11)
}

空指針異常 : NullPointerException,直接輸出沒有問題,但是調(diào)用空指針的變量的功能就會報錯。

public static void main(String[] args) {
    String name = null;
    System.out.println(name.length()); // 空指針異常

    // 異常信息:
    // Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "name" is null
    //	at com.chenyq.d6_exception.ExceptionDemo2.main(ExceptionDemo2.java:6)
}

數(shù)學(xué)操作異常:ArithmeticException

public static void main(String[] args) {
    int c = 20 / 0; // 數(shù)學(xué)異常, 分母不能為0

    // 異常信息:
    // Exception in thread "main" java.lang.ArithmeticException: / by zero
    //	at com.chenyq.d6_exception.ExceptionDemo4.main(ExceptionDemo4.java:5)
}

類型轉(zhuǎn)換異常:ClassCastException

public static void main(String[] args) {
        Object obj = 12;
    String str = (String) obj; // 類型轉(zhuǎn)換異常

    // 異常信息
    // Exception in thread "main" java.lang.ClassCastException: class java.lang.Integer cannot be cast to class
    // java.lang.String (java.lang.Integer and java.lang.String are in module java.base of loader 'bootstrap')
    //	at com.chenyq.d6_exception.ExceptionDemo3.main(ExceptionDemo3.java:6
}

數(shù)字轉(zhuǎn)換異常: NumberFormatException

public static void main(String[] args) {
    String num1 = "23"; // 可以正常轉(zhuǎn)換
    Integer res1 = Integer.valueOf(num1);
    System.out.println(res1 + 1);

    String num2 = "23aaa"; // 不可以正常轉(zhuǎn)換 數(shù)字轉(zhuǎn)換異常
    Integer res2 = Integer.valueOf(num2);
    System.out.println(res2 + 1);

    // 異常信息
    // Exception in thread "main" java.lang.NumberFormatException: For input string: "23aaa"
    //	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
    //	at java.base/java.lang.Integer.parseInt(Integer.java:668)
    //	at java.base/java.lang.Integer.valueOf(Integer.java:999)
    //	at com.chenyq.d6_exception.ExceptionDemo5.main(ExceptionDemo5.java:10)
}

運行時異常:一般是程序員業(yè)務(wù)沒有考慮好或者是編程邏輯不嚴謹引起的程序錯誤,自己水平問題

常見編譯時異常

編譯時異常:

不是RuntimeException或者其子類的異常,編譯階段就報錯(代碼寫出來就報錯),必須處理,否則代碼不通過

編譯時異常示例:

編譯時異常的作用是什么:

是擔心程序員的技術(shù)不行,在編譯階段就爆出一個錯誤, 目的在于提醒代碼可能有錯誤

編譯時異常是可遇不可求, 遇到了解決即可。

補充:自定義異常

Java 中雖然已經(jīng)內(nèi)置了豐富的異常類, 但是我們實際場景中可能還有一些情況需要我們對異常類進行擴展, 創(chuàng)建符合我們實際情況的異常.

我們可以通過一個例子來說明一下:模擬用戶登錄,此時就可能拋出兩種異常,一種是用戶名錯誤異常,一種是密碼錯誤異常:

我們先寫出一段模擬登錄的代碼

public class winning {
    private static final String ID ="java";
    private static final String Password = "666";
    public static void main(String[] args) {
        System.out.println("請輸入你的用戶名");
        Scanner scanner=new Scanner(System.in);
        String name = scanner.nextLine();
        System.out.println("請輸入你的密碼");
        String password = scanner.nextLine();
    }
}

定義拋出用戶名錯誤的異常類

//定義一個用戶名異常
class NameException extends RuntimeException{
    public NameException(String name){
        super(name);
    }
}

定義拋出密碼錯誤的異常

//定義一個密碼異常
class PasswordException extends RuntimeException{
    public PasswordException(String password){
        super(password);
    }
}

我們在進一步完善我們異常處理機制:

public class winning {
    private static final String ID ="java";
    private static final String Password = "666";
    public static void main(String[] args) {
        System.out.println("請輸入你的用戶名");
        Scanner scanner=new Scanner(System.in);
        String name = scanner.nextLine();
        System.out.println("請輸入你的密碼");
        String password = scanner.nextLine();
        if (!ID.equals(name)){
            throw new NameException("用戶名錯了");
        }
        if (!Password.equals(password)){
            throw new PasswordException("密碼有誤");
        }
    }
}

通過這個例子,讓我們了解什么是自定義異常類,如何使用異常類,當然以上代碼可以進行優(yōu)化,可以利用設(shè)置一個login登錄函數(shù),在利用try-catch進行捕獲異常。

總結(jié) 

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

相關(guān)文章

  • 詳解Java的閉包

    詳解Java的閉包

    這篇文章主要介紹了詳解Java的閉包,作者從Lambda和默認方法等重要特性深入講解,極力推薦!需要的朋友可以參考下
    2015-07-07
  • SpringBoot?Mail郵件任務(wù)詳情

    SpringBoot?Mail郵件任務(wù)詳情

    這篇文章主要介紹了SpringBoot?Mail郵件任務(wù)詳情,文章通過spring-boot-starter-mail包展開詳細內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • 詳解Spring注入集合(數(shù)組、List、Map、Set)類型屬性

    詳解Spring注入集合(數(shù)組、List、Map、Set)類型屬性

    這篇文章主要介紹了詳解Spring注入集合(數(shù)組、List、Map、Set)類型屬性,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • IDEA中的pom.xml文件無法識別問題及解決

    IDEA中的pom.xml文件無法識別問題及解決

    這篇文章主要介紹了IDEA中的pom.xml文件無法識別問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Mybatis 緩存原理及失效情況解析

    Mybatis 緩存原理及失效情況解析

    這篇文章主要介紹了Mybatis 緩存原理及失效情況解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Java?Spring?循環(huán)依賴解析

    Java?Spring?循環(huán)依賴解析

    這篇文章主要介紹了Java?Spring?循環(huán)依賴解析,Spring?現(xiàn)在其實是我們?Java?程序開發(fā)離不開的基礎(chǔ)框架,個人覺得除了?JDK?我們用得最多的?Java?中間件就是?Spring?,今天我們一起來學(xué)習(xí)一下?Spring?的循環(huán)依賴。下面詳細內(nèi)容需要的小伙伴可以參考一下
    2022-02-02
  • MyBatisPlus查詢報錯Unknow?column?‘id‘?in?‘field?list‘解決分析

    MyBatisPlus查詢報錯Unknow?column?‘id‘?in?‘field?list‘解決分析

    這篇文章主要為大家介紹了MyBatisPlus查詢報錯Unknow?column?‘id‘?in?‘field?list‘解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • SpringBoot整合SQLite數(shù)據(jù)庫全過程

    SpringBoot整合SQLite數(shù)據(jù)庫全過程

    sqlite是一個很輕量級的數(shù)據(jù)庫,可以滿足日常sql的需求,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合SQLite數(shù)據(jù)庫的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • Java鎖擦除與鎖粗化概念和使用詳解

    Java鎖擦除與鎖粗化概念和使用詳解

    這篇文章主要介紹了Java鎖擦除與鎖粗化概念和使用,鎖擦除的主要判定依據(jù)來源于逃逸分析的數(shù)據(jù)支持,如果判斷在一段代碼中,堆上的所有數(shù)據(jù)都不會逃逸出去從而被其他線程訪問到,那就可以把它們當做棧上數(shù)據(jù)對待,認為它們是線程私有的,同步加鎖自然就無須進行
    2023-02-02
  • Java try catch finally異常處理組合詳解

    Java try catch finally異常處理組合詳解

    這篇文章主要介紹了Java try catch finally異常處理組合詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05

最新評論

肃宁县| 黔东| 丰顺县| 秀山| 揭西县| 夏邑县| 东海县| 普定县| 三门峡市| 玛沁县| 团风县| 恩平市| 敖汉旗| 遵化市| 文化| 罗江县| 龙川县| 榆社县| 博乐市| 桃江县| 怀集县| 二连浩特市| 平罗县| 沿河| 武宣县| 宿州市| 绥德县| 封开县| 广宗县| 安宁市| 怀宁县| 南华县| 松江区| 洛南县| 盱眙县| 仲巴县| 依安县| 老河口市| 鄂尔多斯市| 仁怀市| 通州区|