В Java, вы может использовать несколько catch
блоков.
Это не обязательно означает, что вам нужно.
Это зависит от кода вашего иметь в try
блоке, и сколько проверено Exception
S это потенциально может бросить (или даже непроверенные Exception
сек, если вы действительно хотите, чтобы поймать, что, как правило, у вас нет и вы не :).
Один плохо практика заключается в использовании одного обработчика для общего Exception
(или хуже, Throwable
, который также будет поймать RuntimeException
с и Error
ы):
try {
// stuff that throws multiple exceptions
}
// bad
catch (Exception e) {
// TODO
}
хорошая практика поймать все потенциально выброшенные провереноException
s.
Если некоторые из них связаны с точки зрения наследования, всегда поймать дочерние классы первыми (т.е. более конкретных Exception
с), чтобы ваш код не будет компилироваться:
try {
// stuff that throws FileNotFoundException AND IOException
}
// good: FileNotFoundException is a child class of IOException - both checked
catch (FileNotFoundException fnfe) {
// TODO
}
catch (IOException ioe) {
// TODO
}
Также обратите внимание на Java 7-х multi-catch blocks, где несвязанные Exception
s можно поймать сразу с |
разделителем между каждым Exception
типа:
try (optionally with resources) {
// stuff that throws FileNotFoundException and MyOwnCheckedException
}
// below exceptions are unrelated
catch (FileNotFoundException | MyOwnCheckedException e) {
// TODO
}
Примечание
В this примере вы связаны, первый фрагмент кода ниже Собираем все вместе может, возможно, следует рассматривать как неоптимальной: она делает поймать потенциально брошенные Exception
с, но один из них является IndexOutOfBoundsException
, который является RuntimeException
(непроверенным) и не должен обрабатываться теоретически.
Вместо этого, SIZE
переменных (или скорее константа) должны быть заменена ссылкой на размер List
итерируемые, т.е. list.size()
, с тем чтобы предотвратить IndexOutOfBoundsException
от быть выброшены.
Я предполагаю, что в данном случае это просто пример.
Блок кода может генерировать N типов исключений, и вы можете определить различные потоки для различных исключений. – kosa
Два улова не могут быть одним и тем же типом исключения (это была бы ошибка времени компиляции) - они должны быть разных типов, которые вы бы хотели обрабатывать по-разному. –
Вы не * нуждаетесь * два. У вас может быть 1 ..N уловов, которые поймают другой тип исключения. –