[英]Need a better explanation for try/catch/throw/throws exception handing in Java
我有點不確定 Java 中的 try/catch、throw 和 throws 之間的區別,每個網站似乎都有一種非人道的解釋方式,我嘗試過 Oracle 網站,但我無法理解他們的解釋,這是正確的?
試着抓
使用 try catch,我想嘗試一段代碼,如果出現問題,請執行此操作。
扔
使用throw,我拋出一個錯誤是因為我想要? 所以如果我想驗證一個用戶的年齡,比如說所有 20 歲以上的人並且用戶不符合要求,我會拋出錯誤嗎?
投擲
使用 Throws 我拋出一個錯誤但其他東西處理異常? 這是另一種方法/類嗎?
試着抓
try
{
// try to do some actions
}
catch(SomeExceptionType exception)
{
// if the above actions throw a SomeExceptionType, do these actions
}
扔
正確的。 我們明確地拋出異常。 例如,如果某個方法的調用者違反了您的方法契約,您就可以這樣做。 也許一個論點不能是否定的。
在這種情況下,最好的處理方法是拋出一個異常,停止我們正在做的事情,並允許調用者進一步處理這個問題:
/** Do a thing. myInt must be positive */
void someMethod(Integer myInt)
{
if (myInt < 0)
{
throw new IllegalArgumentException("Can't be negative");
}
// do something
}
void myCaller()
{
someMethod( 1); // won't throw
someMethod(-1); // will throw
}
投擲
throws
在處理檢查異常時用作關鍵字。 這是一種讓調用者知道他們可能需要處理哪些已檢查異常的方法。
這些方法可以決定處理問題(即 try-catch),也可以自己聲明要拋出的相同異常類型以將異常傳播給調用者(等等)
您忘記了一個重點:在 Java 中,編譯器不會以相同的方式處理所有異常。
編譯器確保只處理已檢查的異常。
這些異常不是從RuntimeException
繼承的,而是從Exception
(直接或間接)繼承的。
因此,無論您在代碼中拋出什么或第三個類的方法聲明拋出已檢查異常,您都必須顯式處理它。
你有兩種方法:
捕獲異常
讓異常傳播給調用者
try/catch
解決第一種方法,而在方法聲明中指定throws
修飾符解決第二種方法。
對於沒有RunTimeException
s,您沒有此約束,因為編譯器不會強制您處理它。 如果你願意,你可以處理它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.