2011-12-01 10 views
9

¿Es posible lanzar una excepción sin capturarla?java throwing exception sin alcanzarlo?

Ejemplo

public void foo() throws SomeException{ 
    // .... 
    if (somethingCatestrophic) throw new SomeException(); 
    // .... 
} 

Ahora quiero llamar a foo, pero no quieren detectar cualquier error, ya que las excepciones deben nunca sido lanzados en tiempo de ejecución (a menos que haya un error)

+0

¿Hay alguna razón por la que no desea atraparla? Si se trata de rendimiento, por lo que yo sé, no hay mucha diferencia al pasar por un bloque de try-catch A MENOS QUE se arroje la excepción, entonces hay un montón de sobrecarga. Pero si el error es catastrófico –

+0

No, porque no se supone que ocurra el error (es decir, error de programación o excepciones de tiempo de ejecución). – Pwnna

+0

Whoops, publicado el anterior antes de terminar. ¡Bien, nunca se supone que los errores suceden! Pero parece que estás arrojando el error por el simple hecho de hacerlo. Creo que debes reconsiderar si quieres arrojar el error en primer lugar –

Respuesta

28

A menos que sea algo que esté planificando y recuperándose localmente, probablemente sea mejor utilizar una excepción no comprobada, por ejemplo, un derivado RuntimeException.

+2

¡Gracias! Esto es útil para escribir código no optimista, donde puedo tener una excepción que SIEMPRE NO DEBE pasar, pero está ahí para que otro desarrollador sepa que olvidó algo en su código. –

1

Puede evite atrapar una excepción, pero si se lanza una excepción y no la capta, su programa dejará de ejecutarse (bloqueo).

No hay forma de que ignore una excepción. Si su aplicación no necesita hacer nada en respuesta a una excepción dada, entonces simplemente la atrapará y luego no hará nada.

try { 
    ...some code that throws an exception... 
} catch (SomeException ex) { 
    // do nothing 
} 

NOTA: Sin embargo, a menudo se considera un mal estilo y la gente puede decírselo. El motivo frecuentemente citado es que, incluso si no va a hacer nada con la excepción, en la mayoría de los casos, al menos debe iniciar sesión en algún lugar, notificar al usuario o realizar alguna otra acción apropiada, dependiendo de lo que su aplicación haciendo, y lo que causó la excepción en primer lugar. Si no está seguro de por qué se lanza una excepción (tal vez es un error que aún no ha resuelto), generalmente, al menos debe iniciar sesión para que pueda resolverlo más tarde.

+0

Resulta que lo que necesitaba era RuntimeException, ya que nunca se supone que ocurra el error (la excepción nunca se debe lanzar a menos que haya un error en el código), que me olvidé por completo de – Pwnna

0

Si SomeException es una excepción comprobada, el método que llama foo() o bien se tiene que coger esa excepción y tratar con él o también ser declarado a tirar SomeException o un padre de ella.

Si SomeException es una excepción de tiempo de ejecución, los métodos que lo llamen no tendrán que atraparlo.

1

¿Por qué no lo captas dentro del método?

Simplemente use try catch block y continúe, si la excepción es insignificante y no influye en el comportamiento de su programa.

+0

Sí, se olvidó completamente de RuntimeException. (En el modo python) – Pwnna

Cuestiones relacionadas