class MiError extends Exception { public MiError() {} public MiError(String msg) { super(msg); } } public class DefinirErrores { public static void f() throws MiError { System.out.println("Generando Error explícitamente en f()"); throw new MiError("Originado en f()"); } public static void g() throws MiError { System.out.println("Generando Error explícitamente g()"); throw new MiError("Originado en g()"); } public static void main(String[] args) { try { f(); } catch(MiError e) { e.printStackTrace(System.err); } try { g(); } catch(MiError e) { e.printStackTrace(System.err); } } } |
En el archivo fuente anterior son diseñadas dos Clases : MiError
que define un error ("Exception") propietario y DefinirErrores
que hace uso de esta Clase.
Esta clase hereda ("Inherit") el comportamiento de Exception
, esto permite utilizar funcionalidades ya definidas en esta Clase. NOTA: Aunque la clase base de todo error ("Exception") es java.lang.Throwable
, generalmente se opta por java.lang.Exception
ya que posee mayores funcionalidades(métodos); inclusive si observa la documentación del JDK, notará que la Clase java.lang.Exception
hereda ("inherit") el comportamiento de la Clase java.lang.Throwable
, en efecto teniendo acceso a cualquiera de los métodos/campos disponibles en la Clase Base.
Son definidos dos constructores para esta Clase:
Uno de estos recibe un String como valor de entrada y a su vez manda llamar la Clase Base (Exception
) a través del vocablo super
.
Otro es el constructor sin argumentos que debe ser declarado al emplearse más de un constructor.
Esta Clase define dos métodos llamados f()
y g()
, una característica especifica de estos métodos es que utilizan el vocablo throws
seguido de una Clase, esta sintaxis es obligatoria para los métodos que puedan generar errores, debe hacerse fuerte énfasis que esto es independiente de las declaraciones hechas en los bloques try/catch, es simplemente una sintaxis para los métodos capaces de generar errores.
Dentro de cada método f()
y g()
es generado un error con la clase MiError
explícitamente.
En el método principal (main
) son definidos dos bloques try/catch, en uno de estos es llamado el método f()
y en otro el método g()
.
Al ser llamada la función de cada bloque, se genera un error del tipo MiError
puesto que cada función invoca explícitamente este error.
Cuando se detecta (atrapa) el error se entra en la sección catch donde es invocada la función printStackTrace
vía la referencia e
.NOTA: El método printStackTrace
fue heredado ("Inherited") de la clase Exception
.
La Clase/método System.err
representa el "Stream" de salida para cualquier error generado en un programa Java.