apuntes:excepciones
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | Next revisionBoth sides next revision | ||
apuntes:excepciones [2021/03/10 13:37] – Santiago Faci | apuntes:excepciones [2021/03/10 13:39] – 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 ) | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | \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] | + | < |
. . . | . . . | ||
try { | try { | ||
Line 42: | Line 39: | ||
. . . | . . . | ||
- | \end{lstlisting} | + | </ |
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] | + | < |
. . . | . . . | ||
File fichero = null; | File fichero = null; | ||
Line 68: | Line 65: | ||
} | } | ||
. . . | . . . | ||
- | \end{lstlisting} | + | </ |
==== 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] | + | < |
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} | + | </ |
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] | + | < |
public class Ventana { | public class Ventana { | ||
. . . | . . . | ||
Line 108: | Line 105: | ||
} | } | ||
} | } | ||
- | \end{lstlisting} | + | </ |
==== 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] | + | < |
. . . | . . . | ||
BufferedReader buffer = null; | BufferedReader buffer = null; | ||
Line 142: | Line 139: | ||
} | } | ||
. . . | . . . | ||
- | \end{lstlisting} | + | </ |
==== 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, | Por ejemplo, en una aplicación para la gestión de inventarios, | ||
- | \begin{lstlisting}[language=java] | + | < |
public class FueraDeStockException extends Exception { | public class FueraDeStockException extends Exception { | ||
Line 163: | Line 160: | ||
} | } | ||
} | } | ||
- | \end{lstlisting} | + | </ |
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] | + | < |
. . . | . . . | ||
private void anadirProductoAlCarrito(Producto producto) { | private void anadirProductoAlCarrito(Producto producto) { | ||
Line 175: | Line 172: | ||
} | } | ||
. . . | . . . | ||
- | \end{lstlisting} | + | </ |
Y de esta manera, por ejemplo, en el controlador o interaz de la aplicación, | Y de esta manera, por ejemplo, en el controlador o interaz de la aplicación, | ||
- | \begin{lstlisting}[language=java] | + | < |
public class Ventana { | public class Ventana { | ||
. . . | . . . | ||
Line 192: | Line 189: | ||
. . . | . . . | ||
} | } | ||
- | \end{lstlisting} | + | </ |
==== 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] | + | < |
public class Ventana { | public class Ventana { | ||
. . . | . . . | ||
Line 213: | Line 210: | ||
. . . | . . . | ||
} | } | ||
- | \end{lstlisting} | + | </ |
==== 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] | + | < |
. . . | . . . | ||
try (BufferedReader buffer = | try (BufferedReader buffer = | ||
Line 237: | Line 234: | ||
} | } | ||
. . . | . . . | ||
- | \end{lstlisting} | + | </ |
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 | uno de los interfaces \verb java.lang.AutoClosable | ||
- | \begin{lstlisting}[language=java] | + | < |
public class MiRecurso implements AutoCloseable { | public class MiRecurso implements AutoCloseable { | ||
. . . | . . . | ||
Line 253: | Line 250: | ||
} | } | ||
} | } | ||
- | \end{lstlisting} | + | </ |
===== Aserciones ===== | ===== Aserciones ===== | ||
Line 266: | Line 263: | ||
Veamos un ejemplo: | Veamos un ejemplo: | ||
- | \begin{lstlisting}[language=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} | + | </ |
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 " | Exception in thread " | ||
Line 286: | Line 283: | ||
/ | / | ||
BUILD FAILED (total time: 0 seconds) | BUILD FAILED (total time: 0 seconds) | ||
- | \end{verbatim} | + | </ |
---- | ---- | ||
(c) 2019-2021 Santiago Faci | (c) 2019-2021 Santiago Faci |
apuntes/excepciones.txt · Last modified: 2023/06/04 18:31 by Santiago Faci