大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java中使用throw關鍵字拋出異常

Java中使用throw關鍵字拋出異常

更新時間:2022-11-15 10:24:04 來源:動力節點 瀏覽2538次

相信大家對Java的關鍵字已經有所了解,在學習Java中了解如何在 Java 中拋出異常非常重要。這將允許您創建更高質量的代碼,在編譯時而不是運行時檢查錯誤,并創建使調試和恢復更容易的自定義異常。

如何在 Java 中拋出異常

拋出異常就像使用“throw”語句一樣簡單。然后指定Exception要拋出的對象。每個 Exception 都包含一條消息,該消息是人類可讀的錯誤描述。它通常與用戶輸入、服務器、后端等問題有關。下面是一個顯示如何拋出異常的示例:

throw new Exception("Exception message");

使用通用異常是有局限性的,因為它使調用代碼難以捕獲它。最好拋出自定義異常,稍后我們會回過頭來討論。

使用 Throws 關鍵字

Throws是一個關鍵字,用于指示此方法可以拋出此類異常。調用者必須使用try-catch塊處理異常或傳播異常。我們可以拋出已檢查或未檢查的異常。

throws關鍵字可以讓編譯器幫你寫出處理這類錯誤的代碼,但它并不能阻止程序的異常終止。在throws關鍵字的幫助下,我們可以向方法的調用者提供有關該方法可能拋出的異常類型的信息。

type method_name(parameters) throws exception_list

在上面的語法中,exception_list 是一個方法可能拋出的所有異常的逗號分隔列表。例如:

void testMethod() throws ArithmeticException, ArrayIndexOutOfBoundsException {
    // rest of code
}

在下面的示例中,我們創建了一個測試方法來演示拋出異常。該toString()方法返回對象的文本表示,但在本例中變量為空。在空引用上調用方法或嘗試訪問空引用的字段將觸發NullPointerException.

static void testMethod() throws Exception {
    String test = null;
    test.toString();
}

這必須用 try/catch 塊處理:

public class Example {
    public static void main(String[] arg) {
        try {
            testMethod();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

異常類

要在您的應用程序中更有效地使用異常,了解如何創建和拋出您自己的異常非常重要。但在我們開始拋出異常之前,讓我們先深入了解一下:我們將描述異常是什么以及如何定義您自己的異常,從所有 Java 異常都源自的全局異常類開始:

package java.lang;
public class Exception extends Throwable {
    static final long serialVersionUID = -3387516993124229948L;
    public Exception() {
        super();
    }
    public Exception(String message) {
        super(message);
    }
    public Exception(String message, Throwable cause) {
        super(message, cause);
    }
    public Exception(Throwable cause) {
        super(cause);
    }
    protected Exception(String message, Throwable cause, boolean enableSuppression, boolean     writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

該類Exception是表示可恢復異常的所有類的超類。當拋出異常時,它們可能會被應用程序代碼捕獲。異常類擴展Throwable。構造函數包含兩個參數:消息和原因。detailMessage 參數給出了這個異常的消息的詳細信息,throwable 參數給出了這個異常的原因。

異常類型

Java 中有兩種類型的異常:已檢查(編譯時)異常和未檢查(運行時)異常。為清楚起見,我們還將討論錯誤與 Java 中的異常有何不同。

檢查異常(編譯時異常)

必須在編譯時捕獲和處理已檢查的異常。如果編譯器沒有看到tryorcatch塊或throws關鍵字來處理已檢查的異常,它會拋出一個編譯錯誤。檢查異常通常是由代碼外部的錯誤引起的,例如丟失文件、無效類名和網絡錯誤。

FileInputStream fis = null;
try {
    fis = new FileInputStream("B:/myfile.txt");
} catch (FileNotFoundException e) {
    e.printStackTrace();
    rollbar.error(e, "Hello, Rollbar");
}

未經檢查的異常(運行時異常)

未經檢查的異常不需要顯式處理;它們發生在執行時,也稱為運行時。這些異常通常可以通過良好的編碼實踐來避免。它們通常是由編程錯誤引起的,例如邏輯錯誤或 API 使用不當。這些異常在編譯時被忽略。例如:

public class Main {
    public static void main(String[] args) {
        int a = 10, b = 0;
        System.out.println(a/b);      
    }
}

上面的示例將ArithmeticException在程序運行時引發 an,因為數字不能被 0 除。它會拋出未處理的異常,程序將結束。

錯誤

人們通常將“錯誤”和“異常”通俗地稱為同一事物。但是,在 Java 中,這些是不同的概念。錯誤由 Java 虛擬機拋出,無法捕獲或處理。它們派生自 java.lang.Error,它們是由于應用程序運行環境中的某些錯誤而發生的。例如,堆棧溢出和內存不足異常是導致應用程序退出的環境錯誤。

自定義異常

Java 的內置異常并不總能提供我們需要的信息。因此,我們有時需要用自己的異常來補充這些異常。在一些特定的操作過程中,如果你的應用程序發生了異常,你需要恢復并讓用戶知道。自定義異常為您提供更多控制權,以提供有關問題的額外數據并處理代碼中的異常。

最佳實踐是使用新類擴展java.lang.Exception類,遵循 JDK(Java 開發工具包)提供的一般命名約定。新類需要一個將字符串作為錯誤消息的構造函數——它被稱為父類構造函數。

public class HandledException extends Exception {
    private String code;
    public HandledException(String code, String message) {
        super(message);
        this.setCode(code);
    }
    public HandledException(String code, String message, Throwable cause) {
        super(message, cause);
        this.setCode(code);
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
}

例如,假設一個程序無法連接到數據庫。您可以使用自定義異常來收集數據庫 URL、用戶名、密碼等信息。在該catch塊中,您可以將此信息寫入日志并向用戶顯示一條基本消息,例如“無法連接到數據庫”。

public class MainClass {
    private static String DATABASE_EXCEPTION = "DATABASE_EXCEPTION";
    private static final Logger logger = Logger.getLogger(MainClass.class);
    public static void main(String[] args) {
        try {
            makeDatabaseConnection();
        } catch (HandledException e) {
            rollbar.error(e, "Hello, Rollbar");
            // Display custom message to the user
            System.out.println("Code: "+e.getCode()+” Exception Message : ”+e.getMessage());
            // Log the exception detail
            logger.error("Exception: ", e);
        }
    }
    static void makeDatabaseConnection() throws HandledException {
        String dbURL = "jdbc:sqlserver://localhost\sqlexpress";
        String userName = "sa";
        String password = "secret";
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(dbURL, userName, password);
        } catch (SQLException e) {
            rollbar.error(e, "Hello, Rollbar");
            throw new HandledException(DATABASE_EXCEPTION,"Failed to connect to database", e);
        }
    }
}

 

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产毛片在线 | 国产精品亚洲二线在线播放 | 欧美乱大交xxxxx另类 | 奇米影视88 | 亚洲综合在线视频 | 99国产高清久久久久久网站 | 99视频精品国在线视频艾草 | 四虎免费在线观看视频 | 一级毛片免费完整视频 | 色播影音 | 97视屏 | 一个色在线 | 在线高清免费爱做网 | 日本欧美国产精品 | 中文字幕在线视频一区 | 欧美一级高清片欧美国产欧美 | 久久伊人网站 | 亚洲国产精品久久卡一 | 日韩不卡 | 国产国语一级a毛片高清视频 | 亚洲专区在线视频 | 国产一级特黄特色aa毛片 | 国产成人啪午夜精品网站男同 | 久久久精品视频免费观看 | 久久国产小视频 | 日本在线精品视频 | 大伊香蕉精品视频在线天堂 | 日本在线黄色 | 毛片毛片毛片毛片出来毛片 | 国产综合色香蕉精品五月婷 | 97影院九七影院理论片 | 欧美综合国产精品日韩一 | 伊人激情久久综合中文字幕 | 国产1区2区三区不卡 | 欧美xxx69╳xxhd| 伊人久久在线观看 | 欧美性猛交xxx嘿人猛交 | 国产精品一区在线播放 | 中文字幕日韩一区二区不卡 | 国内精品久久久久影院不卡 | 日韩二三区 |