Nie każdy zdaje sobie z tego sprawę ale poniższe dwie konstrukcje mają inną semantykę:
try { ... } catch(Exception ex) { throw; } |
try
{
...
}
catch(Exception ex)
{
throw ex;
}
|
Różnica jest taka, że stosując pierwszą z nich nie tracimy informacji zawartej w stosie wywołań (stack trace). To znaczy, że jeśli ponownie rzucony przez nas wyjątek zostanie złapany w kolejnym bloku try/cacth to będzie tam dostępna pełna informacja o stosie wywołań począwszy od pierwotnego źródła wyjątku. W drugim przypadku stos wywołań będzie zawierał ograniczoną informację - będzie wyglądał tak, jakby pierwotnym źródłem wyjątku była metoda, w której został on złapany i ponownie rzucony!
0 comments:
Post a Comment