Исключение исключений в Java без потери трассировки стека

В C # я могу использовать throw; для восстановления исключения при сохранении трассировки стека:

 try { ... } catch (Exception e) { if (e is FooException) throw; } 

Есть ли что-то подобное в Java ( которое не теряет исходную трассировку стека )?

 catch (WhateverException e) { throw e; } 

просто закроет исключение, которое вы поймали (очевидно, окружающий метод должен разрешить это через его подпись и т. д.). Исключение будет поддерживать исходную трассировку стека.

Я бы предпочел:

 try { ... } catch (FooException fe){ throw fe; } catch (Exception e) { ... } 

Вы также можете обернуть исключение в другое. Сохраните исходную трассировку стека, передав в качестве параметра причины исключение как Throwable:

 try { ... } catch (Exception e) { throw new YourOwnException(e); } 

В Java почти то же самое:

 try { ... } catch (Exception e) { if (e instanceof FooException) throw e; } 

В Java вы просто бросаете исключение, которое вы поймали, поэтому throw e а не просто throw . Java поддерживает трассировку стека.

что-то вроде этого

 try { ... } catch (FooException e) { throw e; } catch (Exception e) { ... } 
 public int read(byte[] a) throws IOException { try { return in.read(a); } catch (final Throwable t) { /* can do something here, like in=null; */ throw t; } } 

Это конкретный пример, когда метод генерирует IOException . final средства t могут содержать только исключение, выведенное из блока try. Дополнительный материал для чтения можно найти здесь и здесь .

Трассировка стека сохраняется, если вы завернете захваченное выделение в другое исключение (чтобы предоставить дополнительную информацию), или если вы просто перевернули захваченное выделение.

try{ ... }catch (FooException e){ throw new BarException("Some usefull info", e); }

  • Как определить, какие исключения могут быть выбраны данным методом?
  • Когда я должен действительно использовать noexcept?
  • Как генерировать исключения из RepaintManager
  • Однопоточная квартира - не может создавать элементы управления ActiveX
  • Хорошие шаблоны для обработки ошибок VBA
  • В Java как я могу проверить исключение с JUnit?
  • Ловить несколько исключений сразу?
  • java.lang.ArrayIndexOutOfBoundsException: 0
  • В C #, как я могу rethrow InnerException без потери трассировки стека?
  • Можно ли исключить исключение из памяти в java?
  • Каким образом исключения C ++ замедляют работу кода, если нет исключений?
  • Давайте будем гением компьютера.