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

帶你全面認(rèn)識Java中的異常處理

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

Java異常處理

異常體系的介紹

什么事異常處理?

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

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

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

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

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

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

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

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

編譯時(shí)異常和運(yùn)行時(shí)異常:

簡單來說:

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

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

常見運(yùn)行時(shí)異常

運(yùn)行時(shí)異常;

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

常見的運(yùn)行時(shí)異常示例:

數(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)用空指針的變量的功能就會報(bào)錯(cuò)。

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ùn)行時(shí)異常:一般是程序員業(yè)務(wù)沒有考慮好或者是編程邏輯不嚴(yán)謹(jǐn)引起的程序錯(cuò)誤,自己水平問題

常見編譯時(shí)異常

編譯時(shí)異常:

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

編譯時(shí)異常示例:

編譯時(shí)異常的作用是什么:

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

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

補(bǔ)充:自定義異常

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

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

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

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();
    }
}

定義拋出用戶名錯(cuò)誤的異常類

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

定義拋出密碼錯(cuò)誤的異常

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

我們在進(jìn)一步完善我們異常處理機(jī)制:

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("用戶名錯(cuò)了");
        }
        if (!Password.equals(password)){
            throw new PasswordException("密碼有誤");
        }
    }
}

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

總結(jié) 

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

相關(guān)文章

最新評論