[英]What is the difference between these two ways of handling an exception
第一個:
for (i = 0; i < 100; i++)
{
try { n = s.pop(); }
catch (EmptyStackException e) { . . . }
try { out.writeInt(n); }
catch (IOException e) { . . . }
}
第二個:
try
{
for (i = 0; i < 100; i++)
{
n = s.pop();
out.writeInt(n);
}
}
catch (IOException e) { . . . }
catch (EmptyStackException e) { . . . }
我知道通常我們使用第二種處理方式,但我試圖理解為什么它更好。
在第一個示例中,如果您沒有在 catch 塊中拋出另一個異常,則循環將運行所有可能的多個異常。 否則,您將退出第一個異常的循環。
第二個示例將退出第一個異常的循環。
放置 try/catch 結構的位置絕對沒有性能差異。 在內部,它們作為代碼范圍表在調用方法時創建的結構中實現。 當方法正在執行時,除非發生拋出異常,否則 try/catch 結構完全不在畫面中,然后將錯誤的位置與表進行比較。
好吧,實際上只有在代碼無異常運行時才沒有性能差異。
其他答案中提到的差異,並不總是正確的。 這完全取決於實現,特別是您將在 catch 塊中執行的操作。 如果你在 catch 塊中做了一些任務或者什么都不做,然后重新拋出異常,在這種情況下循環肯定會中斷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.