![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Alexandr87 |
|
||||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 9 Всего: 39 |
Хочется услышать коменты. Суть простая - закрытие Connection и Statement, без засорения целевого кода try`ами.
Нормальный ли вариант? Если нет, то почему? Как лучше?
|
||||
|
|||||
| ivg |
|
||||||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 33 Всего: 81 |
ну вот такой вариант
ну и гдето в целевом коде например:
ну а со Statement - аналогично - какой нибудь SqlCommand, где все try {...} catch{} finally{} расставлены, а в UserDAO:
По вашему варианту: В общем случае Statement и Connection закрываются не в одном месте, поскольку в течении одного сеанса может быть выполнено несколько query, update. В блоке finally{} должны быть подавлены все исключения, которые в нём возникают(я думаю понятно почему? Хм, интересно что будет если если этого не сделать, надо поэкспериментировать). То есть метод closeStatementAndConnection() класса Util должен соблюдать это соглашение. Обязательно это нужно указывать в коментарии. Иначе при развитии проекта завтра другим разработчиком это соглашение может быть нарушено. Это сообщение отредактировал(а) ivg - 24.11.2007, 11:39 |
||||||
|
|||||||
| Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 9 Всего: 39 |
так они и так давятся. А развитие этой функции никакое не предвидется. В-целом, очень ценный для меня комментарий. Большое спасибо. |
|||
|
||||
| w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Мне не понятно. Может быть, разъясните? Кроме того:
Это сообщение отредактировал(а) w1nd - 24.11.2007, 15:48 -------------------- ![]() ![]() |
|||
|
||||
| ivg |
|
||||||||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 33 Всего: 81 |
Поэкспериментировал. При возникновении исключений и в try{} и в finally{} ловится последнее, что вобщем то логично.
А ведь даже в этом случае исключения в блоке finally{} возможны например если вставить в класс Utils:
Притянуто за уши конечно, класс Utils может быть загружен раньше вызова writeToDB(). Если в блоке finally{} возникнет исключение то при раскрутке стека вызовов наверх попадет оно. Исключение возникшее ранее в блоке try{} потеряется, а оно, как правило, более информативно, более важно, что ли. Хотя если например вот такая конструкция:
то можно не беспокоится w1nd, последнее не совсем понял вопрос, хотя может уже ответил? Это сообщение отредактировал(а) ivg - 24.11.2007, 16:30 |
||||||||
|
|||||||||
| w1nd |
|
||||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Только в том случае, когда вы _потеряете_ его намеренно. Исключение, возникшее при закрытии соединения не менее важно, чем все прочие. Игнорировать исключение - суть обработать его. В утилитных классах вы не можете адекватно обработать эти исключения, а значит игнорировать их нельзя.
З. Ы. Кстати, для сигнализации об ошибках в статическом инициализаторе есть ExceptionInInitializerError. Это сообщение отредактировал(а) w1nd - 24.11.2007, 16:44 -------------------- ![]() ![]() |
||||
|
|||||
| ivg |
|
||||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 33 Всего: 81 |
Речь идёт о простых конструкциях, без Классов исключений, которые хранят в себе информацию о нескольких исключениях и без оборачивания try{} в try{}? Если так, вот простой код:
Вопрос: как в методе main() поймать TestException?
Я согласен, только "подавлено" не значит "проигнорировано", я имел ввиду не выпускать за пределы блока finally{} Это по тому коду что я привёл? Если так, то это просто демонстрация идеи, как избавиться от Ясно, что код не идеальный и для всех случаев в жизни не подойдёт. |
||||
|
|||||
| w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Нет конечно. Речь о создании свои типов исключений (более высокоуровневые), об обработке всех исключений. Это сообщение отредактировал(а) w1nd - 24.11.2007, 17:54 -------------------- ![]() ![]() |
|||
|
||||
| ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 33 Всего: 81 |
Поразмыслил тут на досуге
Стандартных классов для работы с несколькими исключениями как я понимаю нет? |
|||
|
||||
| Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 9 Всего: 39 |
надо будет найти время перечитать всю тему. Всем большое спасибо за обсуждение.
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |