Programación

1º DAM - Curso 2021-2022

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 revision Previous revision
apuntes:excepciones [2021/03/10 13:37]
Santiago Faci
apuntes:excepciones [2021/03/10 13:39] (current)
Santiago Faci
Line 8: 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 33: 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 42: 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 48: 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 68: Line 65:
 } }
 . . . . . .
-\end{lstlisting}+</code>
  
 ==== Instrucción throws ==== ==== Instrucción throws ====
Line 77: 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 84: 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 91: 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 108: Line 105:
     }     }
 } }
-\end{lstlisting}+</code>
  
 ==== Bloque try-catch-finally ==== ==== Bloque try-catch-finally ====
Line 117: 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 142: Line 139:
 } }
 . . . . . .
-\end{lstlisting}+</code>
  
 ==== Cómo crear tus propias excepciones ==== ==== Cómo crear tus propias excepciones ====
Line 152: 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 163: 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 175: 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 192: Line 189:
     . . .     . . .
 } }
-\end{lstlisting}+</code>
  
 ==== Bloques multi-catch ==== ==== Bloques multi-catch ====
Line 200: 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 213: Line 210:
     . . .     . . .
 } }
-\end{lstlisting}+</code>
  
 ==== Uso de recursos en bloques try-catch ==== ==== Uso de recursos en bloques try-catch ====
Line 221: 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 237: 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 253: Line 250:
     }     }
 } }
-\end{lstlisting}+</code>
  
 ===== Aserciones ===== ===== Aserciones =====
Line 266: 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 276: 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 286: 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: 2021/03/10 13:39 by Santiago Faci