То же самое в GH.Я бы использовал «исключение нулевого указателя» и «исключение из нехватки памяти» в качестве более очевидных примеров исключений, которые вы, вероятно, не смотрите, чтобы перехватить один и тот же блок с вашими истинными исключениями приложения.
IТакже добавлю, что стоит приложить немного усилий для расширения в будущем.Если вы генерируете универсальные исключения повсеместно, а потом решаете, что вам нужно перехватывать некоторые исключения, а не другие, может быть серьезной болью вернуться и изменить их все.Но если вы просто создаете необходимые исключения по мере продвижения, это не так уж и важно.Создание нового класса исключения, который просто принимает конструктор с сообщением, занимает, что, 5 строк кода?Это хорошая инвестиция в будущее.
Как и многие вещи в программировании, вопрос в том, как далеко вы зайдете.Я обычно создаю довольно общее «BadInputException» почти в каждом проекте, над которым я работаю, и выбрасываю его каждый раз, когда пользовательские входные данные не соответствуют критериям проверки.Тогда я могу просто поймать BadInputException и выбросить сообщение на экран.Если я создаю сложный класс, который генерирует исключения для несогласованных данных и тому подобное, я обычно создаю класс исключений для него.Например, если я создаю класс TalkToDatabase, я создаю исключение TalkToDatabaseException.(Может быть, даже больше, если есть несколько видов исключений, которые, я знаю, я хочу поймать, но, по крайней мере, одно.)
И, кстати, я не знаю, думаете ли вы об этом,но я бы настоятельно не рекомендовал изучить текст сообщения об ошибке, чтобы определить тип ошибки.Я видел программы, в которых они генерируют универсальные исключения повсюду, а затем в блоках catch они имеют код, подобный
// Very bad idea! Don't do this!
catch (Exception ex)
{
if (ex.getMessage().equals("Invalid foo"))
... handle bad foo ...
else if (ex.getMessage().equals("Plugh is over maximum"))
... handle bad plugh ...
... etc ...
}
. Было бы намного лучше просто создать отдельные исключения для этих случаев.Мало того, что обработка будет намного более эффективной, но предположим, что вы делаете вышеупомянутое, и кто-то приходит позже и решает изменить сообщение на «Foo is invalid»?Программа по-прежнему будет компилироваться, но не будет работать правильно.