todas salida propagacion manejo lista las jerarquia excepciones errores entrada ejemplos crear java exception

salida - Volver a generar excepciones en Java sin perder el seguimiento de pila



propagacion de excepciones en java (8)

En C #, puedo usar el throw; declaración para volver a emitir una excepción a la vez que se conserva el seguimiento de la pila:

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

¿Hay algo como esto en Java ( que no pierde el rastro de pila original )?


El seguimiento de la pila se conserva si envuelve la extracción capturada en otra excepción (para proporcionar más información) o si simplemente vuelve a lanzar la extracción capturada.

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


En Java es casi lo mismo:

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


En Java, solo lanzas la excepción que atrapaste, así que throw e lugar de solo throw . Java mantiene el seguimiento de la pila.


También puede envolver la excepción en otra Y mantener el seguimiento de la pila original pasando la Excepción como un Throwable como el parámetro de causa:

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


Yo preferiría:

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


algo como esto

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


catch (WhateverException e) { throw e; }

simplemente volverá a generar la excepción que haya capturado (obviamente, el método circundante tiene que permitirlo a través de su firma, etc.). La excepción mantendrá la traza de pila original.


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; } }

Este es un ejemplo concreto en el que el método lanza una IOException . Los medios final t solo pueden contener una excepción lanzada desde el bloque try. Material de lectura adicional se puede encontrar here y here .