Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Бросить тоже исключение 
:(
    Опции темы
sith
Дата 17.10.2008, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 11.2.2007

Репутация: нет
Всего: 1



... есть такая ситуация... я перехвачиваю исключение... обрабатываю его и должен бросить точно такое же исключение что бы уровень выше знал об ошибке... как это сделать - бросить тоже исключение


--------------------
Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!!
PM MAIL   Вверх
Kangaroo
Дата 17.10.2008, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



Код

throw(тоже_исключение);



--------------------
Lost....
PM MAIL MSN   Вверх
mbasil
Дата 17.10.2008, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 2
Всего: 13



Код

 ...
 } catch( Exception e1 ) {
    . . .
   throw new Exception( e1 );
 }


Это сообщение отредактировал(а) mbasil - 17.10.2008, 20:11
PM MAIL   Вверх
Dummy
Дата 17.10.2008, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 21.5.2007

Репутация: 9
Всего: 19



mbasil, а зачем new?

Код

 ...
 } catch( Exception e1 ) {
    . . .
   throw e1;
 }

Если хочется, чтобы "перевыброшенный" объект Exception содержал актуальную информацию о состоянии стека вызовов, нужно изменить код следующим образом:
Код

 ...
 } catch( Exception e1 ) {
    . . .
   throw e1.fillInStackTrace();
 }

PM MAIL   Вверх
w1nd
Дата 20.10.2008, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Dummy, вот за такой код лично я готов отрывать руки по самые гениталии smile Делать надо так, как написал mbasil - стек вызовов должно сохранить.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Dummy
Дата 20.10.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 21.5.2007

Репутация: 9
Всего: 19



w1nd, главная идея того, что я сказал, была в том, что нет необходимости тратить время и память на пересоздание Exception с помощью new. Можно "перевыкинуть" тот же самый объект, что был получен, и при этом стек вызовов данного Exception останется неизменным. 

Что касается fillInStackTrace() - да, думается, практика спорная, я никому ее и не навязывал. Но что же в ней такого криминального, что заставляет перестать фильтровать свою речь?smile  То, что перевыброс Exception с обновленным стеком маскирует изначальный источник проблемы?

Это сообщение отредактировал(а) Dummy - 20.10.2008, 14:17
PM MAIL   Вверх
w1nd
Дата 20.10.2008, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(Dummy @  20.10.2008,  14:16 Найти цитируемый пост)
То, что перевыброс Exception с обновленным стеком маскирует изначальный источник проблемы?

Да. И неважно, будете ли вы сохранять стек или обновлять. 


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Dummy
Дата 20.10.2008, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 21.5.2007

Репутация: 9
Всего: 19



Цитата(w1nd @  20.10.2008,  15:31 Найти цитируемый пост)
Да. И неважно, будете ли вы сохранять стек или обновлять.  

С fillInStackTrace() ситуация ясна.

Но есть какие-то аргументы против подхода
Код

 ...
 } catch( Exception e1 ) {
    . . .
   throw e1; // вместо throw new(e1)
 }

?

Пока не было приведено ни одного.
PM MAIL   Вверх
mbasil
Дата 21.10.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 2
Всего: 13



В том варианте, который я привел исключения должны быть увязаны в цепочку и вы можете посмотреть, как текущее (со стеком), так и породившее (со стеком). Что либо в таком духе:

Код

public void ptintExceptions( Exception p_ex ) {
 while( p_ex != null ) {
        p_ex.printStackTrace(); 
        p_ex = p_ex.getCause();
 }
}


Поэтому то я привел такое решение.

Это сообщение отредактировал(а) mbasil - 21.10.2008, 14:26
PM MAIL   Вверх
Dummy
Дата 21.10.2008, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 21.5.2007

Репутация: 9
Всего: 19



mbasil, спасибо - теперь идея полностью яснаsmile  Моя ошибка была в том, что я неправильно понимал конструктор Exception(Throwable)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0668 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.