1) // La clase que representa la clase de excepción de uso definida MyException extiende la Excepción {public MyException (String s) {super (s); }} ------------------------------------------------ 2) intente {// Lanzar un objeto de excepción definida por el usuario lanzar una nueva MyException ("TestException"); } catch (MyException ex) {System.out.println ("Atrapado"); // Imprime el mensaje desde el objeto MyException System.out.println (ex.getMessage ()); }
Mandeep Yadav
Respuestas:
285
Para definir una excepción marcada , cree una subclase (o jerarquía de subclases) de java.lang.Exception. Por ejemplo:
... y el código que llama a este método debe manejar o propagar esta excepción (o ambas):
try{int i =5;
myObject.calculate(5);}catch(FooException ex){// Print error and terminate application.
ex.printStackTrace();System.exit(1);}catch(IOException ex){// Rethrow as FooException.thrownewFooException(ex);}
Notará en el ejemplo anterior que IOExceptionse captura y se vuelve a lanzar comoFooException . Esta es una técnica común utilizada para encapsular excepciones (generalmente al implementar una API).
A veces habrá situaciones en las que no querrá forzar a cada método a declarar su implementación de excepción en su cláusula throws. En este caso, puede crear una excepción no marcada . Una excepción no marcada es cualquier excepción que se extiende java.lang.RuntimeException(que en sí misma es una subclase de java.lang.Exception):
Las excepciones no verificadas se utilizan generalmente para denotar un error del programador, por ejemplo, pasar un argumento no válido a un método o intentar violar los límites de un índice de matriz.
La java.lang.Throwableclase es la raíz de todos los errores y excepciones que se pueden generar dentro de Java. java.lang.Exceptiony java.lang.Errorson ambas subclases de Throwable. Cualquier cosa que las subclases se Throwablepuedan tirar o atrapar. Sin embargo, normalmente es una mala práctica atrapar o lanzar, Errorya que esto se usa para denotar errores internos de la JVM que el programador no puede "manejar" (por ejemplo OutOfMemoryError). Del mismo modo, debe evitar la captura Throwable, lo que podría resultar en la captura de Errors además de Exceptions.
Técnicamente, cualquier cosa que se extienda Throwablepuede ser arrojada, pero las excepciones son generalmente extensiones de la Exceptionclase para que se verifiquen las excepciones (excepto RuntimeException o las clases basadas en ella, que no están marcadas), a diferencia del otro tipo común de lanzamiento, Errors que generalmente no son algo diseñado para ser manejado con gracia más allá de lo interno de JVM.
También puede hacer que las excepciones no sean públicas, pero solo puede usarlas en el paquete que las define, en lugar de en todos los paquetes.
En cuanto a lanzar / atrapar excepciones personalizadas, funciona igual que las incorporadas: lanzar a través de
RuntimeException extiende Exception y no es una excepción marcada.
Adamski
2
Técnicamente, cualquier cosa que se extienda Throwablepuede ser arrojada ; se extienden excepciones Exception. Una subclase personalizada de Throwable no sería atrapada por un try { ... } catch (Exception e) { ... }bloque.
Andrzej Doyle
¿Por qué la gente vota esta respuesta? Contiene algunas inexactitudes. 1) No puede implicar que se pueda lanzar como una interfaz. 2) Cualquier cosa que extienda Throwable NO es una excepción ( Errorno es una excepción, es un error). 3) Implica que se verifica cualquier subclase de Excepción, mientras que RuntimeException no. ¡La respuesta dada por Adamski es mucho más precisa!
oxbow_lakes
¡Vaya! ¡Quise decir que lanzar no es una interfaz, por supuesto!
oxbow_lakes
@oxbow_lakes: la solución ideal sería corregir las imprecisiones, ¿no? De todos modos, los he corregido yo mismo como nadie más lo hizo.
Respuestas:
Para definir una excepción marcada , cree una subclase (o jerarquía de subclases) de
java.lang.Exception
. Por ejemplo:Los métodos que potencialmente pueden lanzar o propagar esta excepción deben declararla:
... y el código que llama a este método debe manejar o propagar esta excepción (o ambas):
Notará en el ejemplo anterior que
IOException
se captura y se vuelve a lanzar comoFooException
. Esta es una técnica común utilizada para encapsular excepciones (generalmente al implementar una API).A veces habrá situaciones en las que no querrá forzar a cada método a declarar su implementación de excepción en su cláusula throws. En este caso, puede crear una excepción no marcada . Una excepción no marcada es cualquier excepción que se extiende
java.lang.RuntimeException
(que en sí misma es una subclase dejava.lang.Exception
):Los métodos pueden lanzar o propagar
FooRuntimeException
excepciones sin declararlo; p.ejLas excepciones no verificadas se utilizan generalmente para denotar un error del programador, por ejemplo, pasar un argumento no válido a un método o intentar violar los límites de un índice de matriz.
La
java.lang.Throwable
clase es la raíz de todos los errores y excepciones que se pueden generar dentro de Java.java.lang.Exception
yjava.lang.Error
son ambas subclases deThrowable
. Cualquier cosa que las subclases seThrowable
puedan tirar o atrapar. Sin embargo, normalmente es una mala práctica atrapar o lanzar,Error
ya que esto se usa para denotar errores internos de la JVM que el programador no puede "manejar" (por ejemploOutOfMemoryError
). Del mismo modo, debe evitar la capturaThrowable
, lo que podría resultar en la captura deError
s además deException
s.fuente
Tíralo como:
Captura como:
fuente
Para una excepción marcada:
Técnicamente, cualquier cosa que se extienda
Throwable
puede ser arrojada, pero las excepciones son generalmente extensiones de laException
clase para que se verifiquen las excepciones (excepto RuntimeException o las clases basadas en ella, que no están marcadas), a diferencia del otro tipo común de lanzamiento,Error
s que generalmente no son algo diseñado para ser manejado con gracia más allá de lo interno de JVM.También puede hacer que las excepciones no sean públicas, pero solo puede usarlas en el paquete que las define, en lugar de en todos los paquetes.
En cuanto a lanzar / atrapar excepciones personalizadas, funciona igual que las incorporadas: lanzar a través de
y atrapar a través de
fuente
Throwable
puede ser arrojada ; se extienden excepcionesException
. Una subclase personalizada de Throwable no sería atrapada por untry { ... } catch (Exception e) { ... }
bloque.Error
no es una excepción, es un error). 3) Implica que se verifica cualquier subclase de Excepción, mientras que RuntimeException no. ¡La respuesta dada por Adamski es mucho más precisa!