У загальному випадку конструкція виглядає так:
try { ...} catch(SomeExceptionClass e) { ...} catch(AnotherExceptionClass e) { ...}
Працює вона в такий спосіб. Спочатку виконується код, вкладений у фігурні дужки оператора try. Якщо під час його виконання не відбувається ніяких позаштатних ситуацій, то далі керування передається за закриваючу фігурну дужку останнього оператора catch, асоційованого з даним оператором try.
Якщо в межах try виникає виняткова ситуація, то далі виконання коду виробляється по одному з перерахованих нижче сценаріїв.
Виникла виняткова ситуація, клас якої зазначений як параметр одного із блоків catch. У цьому випадку виробляється виконання блоку коду, асоційованого з даним catch.. Далі, якщо код у цьому блоці завершується нормально, те й весь оператор try завершується нормально й керування передається на оператор (вираження), що йде за закриваючою фігурною дужкою останнього catch. Якщо код в catch завершується не штатно, то й весь try завершується нештатно по тій же причині.
Якщо виникла виняткова ситуація, клас якої не зазначений як аргумент у жодному catch, то виконання всього try завершується нештатно.