LINUX.ORG.RU

[java][?] работа с исключениями


1

2

Есть некоторый метод, который обрабатывает xml. При обработке могут вылезти c десяток разных исключений (IOException, SAXException, DOMException и другие). Как их лучше обработать?
- Выпустить все наружу, указав в секции throws метода?
- Ловить все исключения, заносить в лог и «тихо» выходить из метода через return?
- Ловить все исключения и выпускать наружу только как, например, общее IOException с комментарием в параметре конструкторе?
- Другой способ?

Заодно, подскажите, пожалуйста, проект на java, по которому можно было бы подсмотреть стиль кодирования.

заранее спасибо!

★★

public void foo() throws CustomException {
  try {
    // xml processing here
  } catch (SomeExcpectedException e) {
    throw new CustomException(e);
  } catch (Exception e) {
    throw unchecked(e);
  }
}

private static RuntimeException unchecked(Exception e) {
  if (e instance of RuntimeException)
    return (RuntimeException) e;
  else
    return new RuntimeException(e);
}
dizza ★★★★★ ()

И никогда не пытайся ловить Throwable, потому, что если вылетит OutOfMemoryError или типа того, то все равно фиг поймаешь, только хуже будет.

dizza ★★★★★ ()

В общем случае не надо ловить те исключения, которые не можешь обработать.

В случае, если функция дёргает какую-то либу, из которой может вылезти куча разных исключений, не принадлежащих одному базовому классу, то можно ловить их все, аккуратно заворачивать в удобный класс и выкидывать дальше.

const86 ★★★★★ ()
Ответ на: комментарий от dizza

> И никогда не пытайся ловить Throwable, потому, что если вылетит OutOfMemoryError или типа того, то все равно фиг поймаешь, только хуже будет.

И в чем же, после таких заявлений, заключается супернадежность java по сравнению с C/C++?!

anonymous ()
Ответ на: комментарий от anonymous

И в чем же, после таких заявлений, заключается супернадежность java по сравнению с C/C++?!

Управляемое завершение JVM. В отличие от жёсткого падения программ на C/C++, когда непонятно: отдало бажное приложение память системе или протекло до пола так, что нужно жать [reset].

iZEN ★★★★★ ()
Ответ на: комментарий от anonymous

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

dizza ★★★★★ ()
Ответ на: комментарий от iZEN

> В отличие от жёсткого падения программ на C/C++, когда непонятно: отдало бажное приложение память системе или протекло до пола так, что нужно жать [reset].

Чувак, ты все ёще сидишь на {MS,DR}-DOS'е? У меня где-то есть диски с третьей слакой. Ее можно поставить даже поверх FAT-раздела.

LamerOk ★★★★★ ()
Ответ на: комментарий от dizza

>И никогда не пытайся ловить Throwable, потому, что если вылетит OutOfMemoryError или типа того, то все равно фиг поймаешь, только хуже будет.

Как же оно может стать хуже? JVM все равно упадет, а если поймать, то можно еще успеть в какой-нибудь лог занести. Другое дело, что нормальная работа после Error вряд ли продолжаться.

proud_anon ★★★★★ ()
Ответ на: комментарий от proud_anon

Я точно не помню, но вроде бы в лог уже ничего записать не удастся. А если ничего не трогать, жава успеет плюнуть стектрейс. Правда слышал, что некоторые джедаи делают так, что есть выделеный большой массив, а когдп памяти не хватает, как-то умудряются его скормить GC и прожить еще чуть-чуть, что бы успеть подготовиться к падению.

dizza ★★★★★ ()
Ответ на: комментарий от dizza

> А если ничего не трогать, жава успеет плюнуть стектрейс.

Если кто-то прочитает стектрейс, когда жаба упадет, то, конечно, лучше ловить уже постмортем, поскольку будет уже все равно. Только ведь случаи, Петька, разные бывают.

proud_anon ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.