Как правильно обрабатывать RuntimeException
? Например, у меня есть следующий код:
if (file.exists() || file.mkdirs()) {
// далее идёт запись в файл
}
Оба метода, File.exists()
и File.mkdirs()
, могут выбрасывать SecurityException
, которая является подклассом RuntimeException
. И насколько я знаю, RuntimeException
нужно обрабатывать особым образом. Но всё-таки я не до конца понимаю, как именно их правильнее обрабатывать... Или правильнее их вообще не обрабатывать?
Т.е., в этом конкретном случае, какой вариант будет правильнее?
1) проверять только результат выполнения методов, без try-catch:
if (file.exists() || file.mkdirs()) {
// запись в файл
}
2) проверять в try-catch:
try {
if (file.exists() || file.mkdirs()) {
// запись в файл
}
//...
} catch (e: SecurityException) {
// обработка ошибки
}
Написание того или иного кода зависит от того, какой уровень обработки ошибок вы хотите для своего приложения.
Если вы выберите первый способ, то приложение при исполнении просто выведет ошибку в лог или консоль. При этом человек разбирающийся в Java возможно и сможет определить суть проблемы и найти способ, как этой ошибки избежать. Однако это далеко не лучший способ, так как пользователь просто увидит FileNotFoundException
или что-то вроде того.
Второй способ позволяет несколько доработать программу таким образом, чтобы она сама предпринимала действия в случае возникновения данной ошибки:
./...
не найден.В общем случае, try-catch
позволяет что-то сделать с тем, что в ходе исполнения программы возникла ошибка.
Конкретно в вашем случае, надо посмотреть на класс SecurityException
и например дать совет пользователям, что они должны дать привелегии для чтения или записи по данному пути.
Отлавливать RuntimeException
, которое кидается не в вашем коде не имеет смысла. В приведенном описании по ссылке сказано, что такие исключения кидаются в случае если программа дальше не может работать.
Поэтому первый вариант вам больше подходит, но вы можете все-таки отлавливать такие исключения если у вас есть обработчик исключений.
Другое дело, если RuntimeException
кидается в вашем коде, и вы делаете это намеренно, по причине того, скажем, если нельзя использовать Exception
. Тогда, такие исключения следует отлавливать на более высоком уровне, и кидать Exception
.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Регистрирую в приложении нового пользователяЕму присваивается id