[英]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.