Исключение есть, поэтому программисту Задачи не приходится решать проблему самостоятельно. (1): В случае, если проблема НЕ является ЛОГИЧЕСКОЙ для него, чтобы справиться в Задаче.
Задача чтения строки из потока не должна обрабатывать ошибку диска, не так ли? Но это должно быть очень логично, если данные не содержат String.
(2): Он не может справиться с этим сам (недостаточно информации)
Задача для чтения строки из файла и файл, который не найден, может попросить пользователя выбрать другой файл, но как теперь задаче определить, какой папкой может быть файл, каким расширением может быть файл. Не зная этого, как задача может создать графический интерфейс для повторного запроса.
(3): не существует логического (или управляемого) способа различать различные доходы.
Если задача не может прочитать файл и вернуть ноль. А что, если файл в неправильном формате, тоже вернуть null? Как эти два могут отличаться? Исключения могут использоваться, чтобы отличать это. Вот почему это называется Исключением: -D.
(4): Есть много похожих задач, требующих одинаковой обработки и написания, которые трудно выполнить во всех задачах.
Написание кода дескриптора для любого доступа может привести к путанице, так как вам может потребоваться много дубликатов.
interface DBAccess {
public Result accessDB();
}
class DBOperation {
static public void DoOperation(DBAccess pAccess) {
try { return DBAccess.accessDB(); }
catch(InvalidDBPasswordException IPE) {
// Do anything about invalid password
}
catch(DBConnectionLostException DBCLE) {
// Do anything about database connection lost
}
// Catch all possible DB problem
}
}
...
private User[] ShowUserList_and_ReturnUsers() {
// Find the used.
// Show user list
if (Users.count() == 0)
return null;
else return Users;
// No need to handle DB connection problem here
}
private User[] GetUserProfile() {
// Find the used and return
// No need to handle DB connection problem here
}
...
/** An onClick event to show user list */ {
DBOperation.DoOperation(new DBAccess() {
public Result accessDB() {
return ShowUserList_and_ReturnUsers();
}
});
}
/** An onClick event to show a user profile */ {
DBOperation.DoOperation(new DBAccess() {
public Result accessDB() {
return GetUserProfile();
}
});
}
... Many more DB access
(5): Запись всех проверок на ошибки усложнит или замедлит задачу.
Вышеуказанная проблема должна показать, как она может помочь уменьшить осложнение. Вот как это помогает не замедляться.
for(int i = 0; i < Users.length; i++) {
User aUser = Users[i];
// Do something with user
}
Replaced with
try {
for(int i = 0; ; i++) {
User aUser = Users[i];
// Do something with user
}
}
catch(ArrayOutOfBoundException AOBE) {}
Код замены будет иметь более высокую производительность, если число пользователей велико.
<Ч />
Когда возникает ошибка базы данных, следует ли возвращать нулевое значение и код ошибки или выдавать исключение?
Ответ: в зависимости от того, какая ошибка. Например, если вы не можете найти пользователя, это не ошибка. Но если пароль неправильный или соединение не работает, это ошибки, так как попытка обработать его обычным способом усложнит программу.
(1). Использование чрезмерного try-catch () отрицательно влияет на производительность?
Ответ: Согласно «Эффективной Java», насколько я помню, он имеет очень крошечный эффект (только не очень хороший в цикле) (сейчас у меня нет книги со мной).
(2).
Использование определенных типов исключений лучше?
Ответ: Для конкретного пользователя лучше избегать решения неправильной проблемы.
Что если я пропустил один из возможных типов исключений X, которые могут возникнуть? Честно говоря, я слышал и использую всего 10%, я думаю о стандартных исключениях Java, через 2-3 года.
Ответ: Точно так же, как если вы обрабатываете ошибку без исключения, вы тоже можете ее пропустить. Вы просто добавляете это, когда узнаете это.
Да, кто-то сказал, что если вызывающий не знает, как обращаться с отклоненными исключениями, он не должен иметь права вызывать метод броска. Это правильно?
Ответ: Нет, если я не знаю, что делать с каким-то исключением, перебросьте его.
(3). Я прочитал эту статью Андерса Хейлсберга, в которой говорится, что проверенные исключения - это плохо. Должно ли это указывать на то, что в некоторых случаях рекомендуется удобное проглатывание исключений?
Ответ: Я думаю, что он говорит о «проверке исключения» как о функции для компилятора, чтобы гарантировать, что какое-то исключение должно быть обработано. Идея иметь исключение.
(4). Картинка стоит 1000 слов ... я думаю, что некоторые примеры очень помогут здесь.
Ответ: код выше.
Я бегу сейчас ... Извините ... :-p (Будь там через минуту, дорогая !!)