Существуют ли какие-либо затраты на производительность, создавая, бросая и захватывая исключения в Java?
Я планирую добавить "управляемый исключениями" в более крупный проект. Я хотел бы разработать свои собственные исключения и включить их в мои методы, заставляя разработчиков ловить и выполнять соответствующую работу.
Например, если у вас есть способ получить пользователя из базы данных на основе имени.
public User getUser(String name);
Однако возможно, что пользователь может быть пустым, и обычно забывать об этом, прежде чем использовать общедоступный метод пользователя.
User user = getUser("adam");
int age = user.getAge();
что приведет к ошибке NullPointerException и сбою. Однако, если я сделал чек, перед возвратом пользовательского объекта, если его значение null и выкинет "UserIsNullException":
public User getUser(String name) throws UserIsNullException;
Я заставляю разработчика думать и действовать:
try {
User user = getUser("adam");
int age = user.getAge();
}catch( UserIsNullException e) {
}
Это делает код намного безопаснее для непредвиденных сбоев и устраняет больше ошибок. Скажем, на сайте есть сотни посетителей в час, и этот шаблон дизайна используется практически везде.
Как бы такой подход к дизайну повлиял на производительность? Выгоды из-за стоимости или это просто плохое кодирование?
Спасибо за любую помощь!
UPDATE! Чтобы быть ясным, мое внимание не переносит исключение NullPointerException, как может показаться в моем примере. Цель состоит в том, чтобы заставить исполнителя написать try/catch, сохраняя головную боль от реального сбоя, так как a:
user == null
был забыт. Вопрос касается сравнения этих двух моделей дизайна:
int age;
try {
User user = getUser("adam");
age = user.getAge();
}catch( UserIsNullException e) {
age = 0;
}
против
int age;
User user = getUser("adam");
if( user != null ) {
age = user.getAge();
} else {
age = 0;
}