[英]Is catching a specific exception less expensive than catching a generic one?
假設我正在將一個位圖加載到我的Android設備上。 可以拋出許多可能的異常。 為簡單起見,我們采用NullPointerException
和OutOfMemoryError
。
現在我有兩段代碼。
代碼1
try{
//load the bitmap
}
catch(Exception e)
{
//do something
}
代碼2
try{
//load the bitmap
catch (NullPointerException e)
{
//do something
}
catch(OutOfMemoryError e)
{
//do something else
}
一段代碼比其他性能更有效嗎? 如果是這樣,為什么?
從字節碼的角度來看 ,第一個更有效(更少的代碼)。
但是你永遠不應該以這種方式看待表現。
如果您對所有類型的異常具有相同的行為,則應該使用第一組代碼,以任何其他方式,第二組代碼。
在字節代碼中,您有以下代碼負責捕獲eceptions:
L2
LINENUMBER 7 L2
FRAME SAME1 java/lang/NullPointerException
ASTORE 1
GOTO L4
L3
LINENUMBER 9 L3
FRAME SAME1 java/lang/Exception
ASTORE 1
L4
因此,每個例外都有一個代碼,負責捕獲它,但正如我所說,這是一個微小的差異,不應該考慮它。
性能方面沒有區別,因為即使在多個catch塊的情況下也只會執行一個catch。
代碼明智,是首先一個更好,因為Michal說。 好的做法明智的第二種方法更好,因為您能夠捕獲特定的異常並適當地處理它們。
旁注:永遠不要記住內存錯誤,它的錯誤也不例外,你無法有效地處理它
如果每個例外都有不同的行為,第二個行為優於第一個。
表演將是相同的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.