2012-05-25 32 views
7

que he encontrado una clase que se extiende Excepción:¿Por qué extender la clase de excepción?

public class MyException extends Exception 
{ 
    public MyException() 
    { 
     super(); 
    } 

    public MyException(final String argMessage, final Throwable argCause) 
    { 
     super(argMessage, argCause); 
    } 

    public MyException(final String argMessage) 
    { 
     super(argMessage); 
    } 

    public MyException(final Throwable argCause) 
    { 
     super(argCause); 
    } 


} 

¿No es inútil excepción extening esta manera, ya que todos los constructores de policía es simplemente llamando a la Excepción súper clase?

+0

posible duplicado de [Subclase de excepción en Java: ¿cuándo no es un mensaje personalizado "suficientemente bueno"?] (Http://stackoverflow.com/questions/9366425/subclassing-exception -in-java-when-isnt-a-custom-message-good-enough) –

Respuesta

8

No, no tiene sentido. Puede catch la excepción específica de esta manera y manejarlo específicamente, en lugar de capturar un Exception general, que podría no ser manejado en todos los casos.

Con esto, usted puede hacer:

try { 
    foo(); 
} catch (MyException e) { 
    handleMyException(e); 
} 

cual no es posible si no sabe cómo manejar un general Exception, pero se puede manejar MyException mejor.

También mejora la legibilidad, es mejor declarar un método como throws MyException (con mejor nombre generalmente) luego throws Exception - usted sabe lo que puede salir mal de esta manera.

5

Sí, hay un motivo. Le permite diferenciar el tipo de sus excepciones.

Supongamos que este siguiente código:

try { 
    // some instructions 
} catch (MyFirstException firstException) { 
    // Handler for the first exception 
} catch (MySecondException secondException) { 
    // Handler for the first exception 
} catch (Exception exception) { 
    // Handler for all other exceptions 
} 

Evento si el MyFirstException y MySecondException hereda de Exception y anular todos los métodos, puede distinguirlos de los bloques catch. Por lo tanto, puede tener diferentes controladores para ambas excepciones.

0

cuando siempre haría un catch (Exception e), podría captar todas y cada una de las subclases de Exception, esto también se aplica específicamente a RuntimeException s que generalmente no desea capturar. Esto solo puede empeorar capturando Throwable

Cuestiones relacionadas