а) вы не можете изменить порядок блоков захвата.Если бы вы это сделали, блок для IOException стал бы недоступным - экземпляр IOException также является экземпляром Exception, поэтому блок catch (Exception e)
перехватит его, и вы никогда не нажмете на блок catch (IOException e)
.В этом случае код не будет компилироваться - недоступный код не разрешен.
b) поскольку MyException расширяет Exception, а не IOException, он никогда не будет перехвачен блоком catch (IOException e)
.Поэтому он будет перехвачен блоком catch (Exception e)
.
ОБНОВЛЕНИЕ
Вы изменили вопрос, поэтому ответ немного отличается:
a) Вы по-прежнемуне может перевернуть блоки.
b) Теперь, когда вы изменили первый блок на catch (MyException e)
, выброшенное исключение будет поймано там.Процедура заключается в том, что компилятор просматривает каждый блок catch.Если исключение, которое оно пытается обработать, является экземпляром перехваченного исключения, выполняется этот блок catch.Если нет, он переходит к следующему блоку перехвата.Если блоков перехвата больше нет, выполнение резко прерывается (термин из спецификации языка Java).