Допустимый случай для исключения:
- Вы пытаетесь открыть файл, его там нет, выдается исключение FileNotFoundException;
Незаконное дело:
- Вы хотите что-то сделать, только если файл не существует, вы пытаетесь открыть файл, а затем добавить некоторый код в блок catch.
Я использую исключения, когда хочу разорвать поток приложения до определенной точки . В этой точке есть улов (...) для этого исключения. Например, очень часто нам приходится обрабатывать загрузку проектов, и каждый проект должен обрабатываться независимо от других. Таким образом, цикл, который обрабатывает проекты, имеет блок try ... catch, и если во время обработки проекта возникает какое-то исключение, все откатывается для этого проекта, регистрируется ошибка и обрабатывается следующий проект. Жизнь продолжается.
Я думаю, вы должны использовать исключения для таких вещей, как файл, который не существует, выражение, которое является недопустимым, и тому подобное. Вы не должны использовать исключения для тестирования диапазона / тестирования типа данных / существования файла / чего-либо еще, если есть простая / дешевая альтернатива этому. Вы не должны использовать исключения для тестирования диапазона / тестирования типа данных / существования файла / что бы то ни было, если есть простая / дешевая альтернатива, потому что такая логика делает код трудным для понимания:
RecordIterator<MyObject> ri = createRecordIterator();
try {
MyObject myobject = ri.next();
} catch(NoSuchElement exception) {
// Object doesn't exist, will create it
}
Это было бы лучше:
RecordIterator<MyObject> ri = createRecordIterator();
if (ri.hasNext()) {
// It exists!
MyObject myobject = ri.next();
} else {
// Object doesn't exist, will create it
}
КОММЕНТАРИЙ, ДОБАВЛЕННЫЙ К ОТВЕТУ:
Возможно, мой пример был не очень хорош - ri.next () не должен выдавать исключение во втором примере, и если это так, то есть что-то действительно исключительное, и нужно выполнить какое-то другое действие в другом месте. Когда пример 1 интенсивно используется, разработчики поймают общее исключение вместо конкретного и предположят, что исключение связано с ожидаемой ошибкой, но это может быть связано с чем-то другим. В конце концов, это приводит к игнорированию реальных исключений, поскольку исключения стали частью потока приложения, а не исключением из него.
Комментарии к этому могут добавить больше, чем сам мой ответ.