Programación

1º DAM/DAW - Curso 2023-2024

User Tools

Site Tools


apuntes:excepciones

This is an old revision of the document!


Gestión de las excepciones

\part*{Gestión de las Excepciones}

\section{Las excepciones}

Las excepciones son errores que se producen en tiempo de ejecución y que no pueden ser controladas ni anticipadas en tiempo de compilación. Fallos como que el disco duro esté lleno, que no se pueda acceder a una carpeta determinada, que la aplicación no pueda conectar con la red en un momento determinado y otro tipo de causas (ajenas e imposibles de controlar por parte de quien programó la aplicación) deben ser controladas para que el fallo que puedan ocasionar se contenga y no permita que el programa falle.

Para controlar las excepciones existe, en Java, una estructura de código que permite contener el código susceptible de generarlas. De esa forma podemos asociar un caso de error en caso de que se produzca dicha excepción, mostrar el código asociado a ese error, y hacer que la aplicación pueda seguir ejecutándose sin problemas. Podríamos, por ejemplo, ofrecer al usuario la opción de volver a intentarlo a la vez que le podemos sugerir diferentes causas del error (quizás se haya quedado sin conexión o tenga que comprobar si tiene permisos para escribir en la carpeta que ha especificado).

\section{Recuperación de excepciones}

\begin{lstlisting}[language=java] . . . try {

  instrucciones_que_pueden_generar_excepcion;

} catch (<ClaseExcepcion> <nombre_excepcion>) {

  instrucciones_en_caso_de_que_se_produzca_la_excepcion;

} [ finally {

  instrucciones_en_cualquier_caso;

} ] . . . \end{lstlisting}

\begin{lstlisting}[language=java] . . . try {

  int i = Integer.parseInt("cadena de texto");
  // Aqui incluiremos el código que dependa de la instrucción que genera la excepción
  // para que sólo se ejecuten si todo va bien

} catch (NumberFormatException nfe) {

  // Este bloque sólo se ejecuta si se produce la excepción
  nfe.printStackTrace();
  System.out.println("Error al convertir el tipo de dato");

} . . . \end{lstlisting}

\section{Creación y activación de Excepciones}

También podemos crear nuestras propias excepciones, y lanzarlas cuando nuestra aplicación llegue a estados que consideremos de error en tiempo de ejecución.

Para eso, primero tendremos que crear una clase que herede de la clase \verb Exception para luego lanzarla utilizando la palabra reservada \verb throw .

\begin{lstlisting}[language=java] public class NoRevisadoException extends Exception {

  public NoRevisadoException() {
      super();
  }
  public NoRevisadoException(String mensaje) {
      super(mensaje);    
  }

} \end{lstlisting}

A continuación, podremos utilizar la excepción cuando nuestra aplicación llegue a un estado de excepción. Al utilizar mis propias excepciones serán normalmente casos en los que el fallo está directamente relacionado con el funcionamiento de la propia lógica de negocio.

En el ejemplo siguiente, cuando se entrega un coche al cliente hay que comprobar que éste esté revisado previamente. En caso de que no lo esté se producirá un error de tipo \verb NoRevisadoException y se lanzará dicha excepción. Además, con la instrucción \verb throws avisaremos de que este método puede lanzar una excepción, para que sea capturada mediante un bloque \verb try-catch por quién invoque al método \verb entregarVehiculo .

\begin{lstlisting}[language=java] . . . public void entregarVehiculo() throws NoRevisadoException {

  
  if (!vehiculo.estaRevisado()) {
      throw new NoRevisadoException("El vehículo no está revisado, no puede entregarse");
  }
  . . .
  . . .

} . . . \end{lstlisting}


© 2019 Santiago Faci

apuntes/excepciones.1550182379.txt.gz · Last modified: 2019/02/14 22:12 by Santiago Faci