Я бы сказал, что это в основном вопрос предпочтений, но выделенный улов emtpy выглядит мне чище. Можно предположить, что программисты, читающие ваш код, знакомы с конструкциями try / catch, и они ожидают, что вы отсортируете свои блоки catch от конкретных к общим. Обычный способ, которым люди читают конструкции try / catch, состоит в том, чтобы пролистывать ловушки, пока не найдет тот, который соответствует тому, что они ищут (как это делает компилятор), а затем посмотреть, что он делает. В любом случае читатель делает это, поэтому, когда у вас есть выделенный пустой улов для этого типа исключения, сразу становится очевидным, что это особый случай и вы отбрасываете исключение. Встроенная логика проверки типа, OTOH, требует, чтобы читатель нашел более общую ветку исключения, которая, вероятно, находится далеко внизу списка блоков catch, а затем прочитал реальную логику, чтобы выяснить, что происходит. Я бы сказал, что это требует гораздо больше усилий по чтению, чем пустой улов.
Другое дело, что у вас должна быть веская причина игнорировать исключения; с пустым блоком перехвата, вам и всем, кто просматривает ваш код, сразу станет очевидно, что вы игнорируете ошибки, и это хорошо - это означает, что люди заметят и будут немного более осведомлены о такой потенциальной ошибке, и вы подтолкнуть к добавлению комментария, объясняющего, почему вы это делаете. Если вы похороните часть «игнорируй это исключение» внутри логики обработчика, люди могут прочесть мимо нее и удивиться, почему их исключение нигде не появляется.