Programación

1º DAM/DAW - Curso 2023-2024

User Tools

Site Tools


apuntes:excepciones

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
apuntes:excepciones [2021/03/10 13:14] Santiago Faciapuntes:excepciones [2021/03/10 13:39] Santiago Faci
Line 1: Line 1:
-====== Gestión de las excepciones ======+====== Excepciones y aserciones ======
  
-\part*{Excepciones y aserciones} +===== Excepciones =====
- +
-\section{Excepciones}+
  
 Las excepciones en Java son errores que se producen en tiempo de ejecución. Cuando realizamos el proceso de compilación pueden aparecer una Las excepciones en Java son errores que se producen en tiempo de ejecución. Cuando realizamos el proceso de compilación pueden aparecer una
Line 10: Line 8:
 que, en Java, acaban lanzando una excepción si llegan a producirse: que, en Java, acaban lanzando una excepción si llegan a producirse:
  
-\begin{itemize} +  * Estamos escribiendo en disco y éste se llena (\verb IOException ) 
-    \item Estamos escribiendo en disco y éste se llena (\verb IOException ) +  Estamos descargando un fichero y cae la conexión a Internet (\verb ConnectionException ) 
-    \item Estamos descargando un fichero y cae la conexión a Internet (\verb ConnectionException ) +  Estamos recorriendo un array en un bucle y accedemos a una posición que no existe (\verb IndexOutOfBoundException ) 
-    \item Estamos recorriendo un array en un bucle y accedemos a una posición que no existe (\verb IndexOutOfBoundException ) +  Accedemos atributos o métodos de un objeto cuyo valor es nulo (\verb NullPointerException ) 
-    \item Accedemos atributos o métodos de un objeto cuyo valor es nulo (\verb NullPointerException ) +  Realizamos una operación matemática no válida (división por cero) (\verb ArithmeticException )
-    \item Realizamos una operación matemática no válida (división por cero) (\verb ArithmeticException ) +
-    \item . . . +
-\end{itemize}+
  
 En Java se propone el control de excepciones para evitar que se produzcan estos errores en lugar de tener que escribir continuamente En Java se propone el control de excepciones para evitar que se produzcan estos errores en lugar de tener que escribir continuamente
Line 35: Line 30:
 para corregir o notificar el problema (parte \verb catch ). para corregir o notificar el problema (parte \verb catch ).
  
-\begin{lstlisting}[language=java]+<code java>
 . . . . . .
 try { try {
Line 44: Line 39:
  
 . . . . . .
-\end{lstlisting}+</code>
  
 En este caso, el código que hay asociado al bloque \verb try  se ejecutará de forma que, si dentro de él se produjera una excepción, el En este caso, el código que hay asociado al bloque \verb try  se ejecutará de forma que, si dentro de él se produjera una excepción, el
Line 50: Line 45:
 el grupo \verb try-catch . el grupo \verb try-catch .
  
-\begin{lstlisting}[language=java]+<code java>
 . . . . . .
 File fichero = null; File fichero = null;
Line 70: Line 65:
 } }
 . . . . . .
-\end{lstlisting}+</code>
  
-\subsection{Instrucción throws}+==== Instrucción throws ====
  
 También podemos, en lugar de capturar la excepción, lanzarla haciendo que tenga que ser controlada en un nivel superior. Por ejemplo, si También podemos, en lugar de capturar la excepción, lanzarla haciendo que tenga que ser controlada en un nivel superior. Por ejemplo, si
Line 79: Line 74:
 podamos ajustar mejor el comportamiento en caso de error. podamos ajustar mejor el comportamiento en caso de error.
  
-\begin{lstlisting}[language=java]+<code java>
 public class Util { public class Util {
     public static Date parseFecha(String fecha) throws ParseException {     public static Date parseFecha(String fecha) throws ParseException {
Line 86: Line 81:
     }     }
 } }
-\end{lstlisting}+</code>
  
 El ejemplo de arriba es un caso en el que tenemos un método estático que utilizamos para parsear fechas en nuestra aplicación. Cuando el El ejemplo de arriba es un caso en el que tenemos un método estático que utilizamos para parsear fechas en nuestra aplicación. Cuando el
Line 93: Line 88:
 lancemos fuera la excepción para que sea quién utilice este método quién deba decidir qué hacer en caso de fallo. Por ejemplo: lancemos fuera la excepción para que sea quién utilice este método quién deba decidir qué hacer en caso de fallo. Por ejemplo:
  
-\begin{lstlisting}[language=java]+<code java>
 public class Ventana { public class Ventana {
     . . .     . . .
Line 110: Line 105:
     }     }
 } }
-\end{lstlisting}+</code>
  
-\subsection{Bloque try-catch-finally}+==== Bloque try-catch-finally ====
  
 Se puede añadir también un tercer bloque de código asociado a la parte \verb try  que permite añadir código que se ejecutará siempre, de Se puede añadir también un tercer bloque de código asociado a la parte \verb try  que permite añadir código que se ejecutará siempre, de
Line 119: Line 114:
 de ejecución del código se vea interrumpido por una excepción. de ejecución del código se vea interrumpido por una excepción.
  
-\begin{lstlisting}[language=java]+<code java>
 . . . . . .
 BufferedReader buffer = null; BufferedReader buffer = null;
Line 144: Line 139:
 } }
 . . . . . .
-\end{lstlisting}+</code>
  
-\subsection{Cómo crear tus propias excepciones}+==== Cómo crear tus propias excepciones ====
  
 Como ya hemos visto, Java tiene una serie de \emph{unchecked} y \emph{checked exceptions} que son lanzadas en determinadas situaciones. Como ya hemos visto, Java tiene una serie de \emph{unchecked} y \emph{checked exceptions} que son lanzadas en determinadas situaciones.
Line 154: Line 149:
 Por ejemplo, en una aplicación para la gestión de inventarios, almacenes o pedidos, podemos definir una excepción como la del siguiente ejemplo, para que sea lanzada en el caso de que se termine el stock de algún producto de nuestro almacén: Por ejemplo, en una aplicación para la gestión de inventarios, almacenes o pedidos, podemos definir una excepción como la del siguiente ejemplo, para que sea lanzada en el caso de que se termine el stock de algún producto de nuestro almacén:
  
-\begin{lstlisting}[language=java]+<code java>
 public class FueraDeStockException extends Exception { public class FueraDeStockException extends Exception {
  
Line 165: Line 160:
     }     }
 } }
-\end{lstlisting}+</code>
  
 Así, cuando nos encontramos con esa situación, podemos directamente lanzar nuestra excepción: Así, cuando nos encontramos con esa situación, podemos directamente lanzar nuestra excepción:
  
-\begin{lstlisting}[language=java]+<code java>
 . . . . . .
 private void anadirProductoAlCarrito(Producto producto) { private void anadirProductoAlCarrito(Producto producto) {
Line 177: Line 172:
 } }
 . . . . . .
-\end{lstlisting}+</code>
  
 Y de esta manera, por ejemplo, en el controlador o interaz de la aplicación, podríamos hacer algo así: Y de esta manera, por ejemplo, en el controlador o interaz de la aplicación, podríamos hacer algo así:
  
-\begin{lstlisting}[language=java]+<code java>
 public class Ventana { public class Ventana {
     . . .     . . .
Line 194: Line 189:
     . . .     . . .
 } }
-\end{lstlisting}+</code>
  
-\subsection{Bloques multi-catch}+==== Bloques multi-catch ====
  
 También es posible capturar más de un tipo de excepción bajo un mismo bloque \verb catch , aunque no es una práctica recomendada ya que no También es posible capturar más de un tipo de excepción bajo un mismo bloque \verb catch , aunque no es una práctica recomendada ya que no
Line 202: Line 197:
 asociado el mismo bloque de código. asociado el mismo bloque de código.
  
-\begin{lstlisting}[language=java]+<code java>
 public class Ventana { public class Ventana {
     . . .     . . .
Line 215: Line 210:
     . . .     . . .
 } }
-\end{lstlisting}+</code>
  
-\subsection{Uso de recursos en bloques try-catch}+==== Uso de recursos en bloques try-catch ====
  
 Como hemos visto en el primer ejemplo, accedíamos a un fichero en la excepción, para luego acabar liberando los recursos al finalizar el Como hemos visto en el primer ejemplo, accedíamos a un fichero en la excepción, para luego acabar liberando los recursos al finalizar el
Line 223: Line 218:
 liberen al terminar. Así, ese ejemplo podría escribirse de la siguiente forma: liberen al terminar. Así, ese ejemplo podría escribirse de la siguiente forma:
  
-\begin{lstlisting}[language=java]+<code java>
 . . . . . .
 try (BufferedReader buffer =  try (BufferedReader buffer = 
Line 239: Line 234:
 } }
 . . . . . .
-\end{lstlisting}+</code>
  
 Para este caso, hay que tener en cuenta que, para que Java pueda liberar automáticamente los recursos de una clase Java, debemos implementar Para este caso, hay que tener en cuenta que, para que Java pueda liberar automáticamente los recursos de una clase Java, debemos implementar
 uno de los interfaces \verb java.lang.AutoClosable  o \verb java.io.Closable , y declarar un método \verb close() : uno de los interfaces \verb java.lang.AutoClosable  o \verb java.io.Closable , y declarar un método \verb close() :
  
-\begin{lstlisting}[language=java]+<code java>
 public class MiRecurso implements AutoCloseable { public class MiRecurso implements AutoCloseable {
     . . .     . . .
Line 255: Line 250:
     }     }
 } }
-\end{lstlisting}+</code>
  
-\section{Aserciones}+===== Aserciones =====
  
 Las aserciones son sentencias utilizadas para comprobar si una condición es cierta (o no) y controlar asi los errores en el código. Las aserciones son sentencias utilizadas para comprobar si una condición es cierta (o no) y controlar asi los errores en el código.
Line 268: Line 263:
 Veamos un ejemplo: Veamos un ejemplo:
  
-\begin{lstlisting}[language=java]+<code java>
 . . . . . .
 String cadena = "Esto es un texto"; String cadena = "Esto es un texto";
Line 278: Line 273:
 assertion cadena == null; assertion cadena == null;
 . . . . . .
-\end{lstlisting}+</code>
  
 Si ejecutamos el código anterior con la opción \verb -ea  activada como opción de la JVM, se nos mostrará el siguiente mensaje de error: Si ejecutamos el código anterior con la opción \verb -ea  activada como opción de la JVM, se nos mostrará el siguiente mensaje de error:
  
-\begin{verbatim}+<code bash>
 run: run:
 Exception in thread "main" java.lang.AssertionError: La cadena es nula Exception in thread "main" java.lang.AssertionError: La cadena es nula
Line 288: Line 283:
 /Users/Santi/Library/Caches/NetBeans/8.2/executor-snippets/run.xml:53: Java returned: 1 /Users/Santi/Library/Caches/NetBeans/8.2/executor-snippets/run.xml:53: Java returned: 1
 BUILD FAILED (total time: 0 seconds) BUILD FAILED (total time: 0 seconds)
-\end{verbatim}+</code>
  
 +----
  
 (c) 2019-2021 Santiago Faci (c) 2019-2021 Santiago Faci
apuntes/excepciones.txt · Last modified: 2023/06/04 18:31 by Santiago Faci