Наконец-то и блоки catch совсем разные:
- В блоке catch вы можете ответить на выброшенное исключение. Этот блок выполняется только в том случае, если есть необработанное исключение и тип соответствует одному или является подклассом класса, указанного в параметре блока catch.
- Наконец, всегда будет выполняться после блоков try и catch независимо от того, было ли вызвано исключение.
So
try {
//some code
}
catch (ExceptionA) {
// Only gets executed if ExceptionA
// was thrown in try block
}
catch (ExceptionB) {
// Only executed if ExceptionB was thrown in try
// and not handled by first catch block
}
отличается от
try {
//some code
}
finally {
// Gets executed whether or not
// an exception was thrown in try block
}
значительно.
Если вы определяете блок try, вы должны определить
- один последний блок или
- один или несколько блоков улова или
- один или несколько блоков захвата и один, наконец, блок
Таким образом, следующий код будет также действительным:
try {
//some code
}
catch (ExceptionA) {
// Only gets executed if
// ExceptionA was thrown in try block
}
catch (ExceptionB) {
// Only executed if ExceptionB was thrown in
// try and not handled by first catch block
}
//even more catch blocks
finally {
// Gets executed whether or not an
// exception was thrown in try block
}