簡體   English   中英

在Java / Android中拋出自定義異常

[英]Throw custom Exceptions in Java/Android

我正在開發一個自定義的Exception類,其中我有以下構造函數:

public class UserException extends Exception
{
    string message;
    public UserException() {
        super();
    }

    public UserException(String message, Throwable cause)
    {
        super(message, cause);

        this.cause = cause;
        this.message = message;
    }
}

我創建了一個新的自定義異常,如下所示:

private Camera.PreviewCallback SetPreviewCallBack() throws UserException {
    .......
    // Something went wrong
    throw new UserException("Something failed.", new Throwable(String.valueOf(UserExceptionType.CaptureFailed)));
 }

但當我插入我的throw new UserException(...)它告訴我用try/catch包圍它! 這不是主意,不是嗎? 我希望在需要拋出自定義異常時拋出自定義異常,而不會使用更多try/catch子句來覆蓋我的new Exceptions

那么,我做錯了什么? 我誤解了什么?

除了Eran的答案之外,您還可以使自定義Exception擴展RuntimeException ,而不需要捕獲它。

如果拋出此異常的方法不處理它(即它沒有捕獲它),它必須在throws子句中聲明它,因為這是一個經過檢查的異常。

public void yourMethod () throws UserException
{
    ...
    throw new UserException("Something failed.", new Throwable(String.valueOf(UserExceptionType.CaptureFailed)));
    ...
}

如果您的自定義異常從Exception類擴展,則必須處理它(使用try-catch )或傳遞給調用者(使用throws )。 如果你只想將它留給運行時來處理異常,你需要從RuntimeException類擴展它因為它是你的場景中的第一種情況,你應該這樣做:

public void surroundingMethod() throws UserException{
    throw new UserException("Something failed.", new Throwable(String.valueOf(UserExceptionType.CaptureFailed)));
}

這實際上會將您的異常傳遞給調用者,所以現在調用者有責任使用try-catch處理它或者再次傳遞它。

所以,你需要修改調用指令

public void callingMethod () {
    try {
        surroundingMethod();
    } catch (UserException ex){
    }
}

您應該將您的方法聲明為throws UserException - 或者使您的異常擴展RuntimeException

后者是官方未經修改的,但通常用於繞過java聲明的異常機制

在Java中,當您throw一個已檢查的 Exception ,還需要做一件事:

1.throw周圍添加一個try-catch塊,並在同一個方法中處理此Exception

2.或者向方法定義添加throws語句,將處理Exception的責任轉移到更高級別的方法。

這是模塊化和抽象的整體OOP范例的一部分:誰負責處理Exception ,方法的調用者或方法本身? 答案取決於Exception的性質。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM