Una excepción es la indicación de que se produjo un error en el programa.
Las excepciones, como su nombre lo indica,
se producen cuando la ejecución de un programa no termina correctamente,
sino que termina de manera excepcional
como consecuencia de una situación inesperada.
Las excepciones pueden producirse
prácticamente por cualquier línea de código.
Por tanto, es importante que al momento de desarrollar una aplicación,
esta cuente con un manejo de excepciones adecuado,
esto con el fin de evitar los posibles ataques
que tienden a aprovecharse de dichos errores
con el objetivo de obtener información confidencial
o realizar otras acciones no deseadas.
El manejo de excepciones en Java
se hace mediante el uso de las sentencias try y catch.
El código que se considere puede producir una excepción
es puesto dentro de la sentencia try,
y el código que se ejecutará cuando se presente dicha excepción,
irá dentro de la sentencia catch.
De esa manera es posible capturar las excepciones
cuando estas sucedan y tratarlas cuando se presentan.
Otro aspecto importante a la hora de desarrollar una aplicación
es el consumo de recursos.
Es decir, mantener un bajo consumo de recursos del sistema
ayuda a disminuir los tiempos de ejecución, mejorando,
de esta manera, el rendimiento y la experiencia del usuario final.
Entonces, para lograr un manejo de excepciones
con un uso eficiente de recursos
se recurre a la implementación de la sentencia finally.
Los bloques de código embebidos dentro de finally
tienden a limpiar todos los recursos localizados
dentro de una sentencia try.
La ventaja de la sentencia finally
es que permite ser ejecutada
cada vez que una excepción ocurre en el bloque try.
Si se combinan estas dos sentencias,
en conjunto con la sentencia catch,
se obtendrá una aplicación que maneja las excepciones de forma adecuada.
-
La estructura típica que tiene un código que libera recursos
en consultas a bases de datos se presenta a continuación:
recursos.java
try
{
...
statement = conn.prepareStatement(query);
rs = statement.executeQuery();
...
}
catch(SQLException e)
{
//codigo en caso de que halla un error
}
finally
{
...
// Se cierra el recurso una vez se termine de usar.
if (statement != null) { statement.close(); }
...
}
-
El siguiente ejemplo libera recursos
una vez se ha leído el archivo prueba,
el cual contiene alguna frase dentro de él.
-
Se definen las variables para lectura del archivo.
Deben estar por fuera del try
para que sean visibles también desde el catch y el finally.
main.java
public class Main {
public static void main(String[] args) throws java.io.IOException {
File archivo = null;
FileReader lectorArchivo = null;
BufferedReader memoriaLector = null;
-
En el bloque try se inicializan las variables y se lee el archivo.
try {
String ruta="./";
//archivo = new File("prueba");
archivo = new File(args[0]);
lectorArchivo = new FileReader(archivo);
memoriaLector = new BufferedReader(lectorArchivo);
String linea;
while((linea=memoriaLector.readLine())!=null){
System.out.println(linea);
}
}
-
Se capturan las excepciones.
catch(FileNotFoundException e){
System.out.println("Se ha producido una excepción");
}
-
Se cierran recursos una vez se terminaron de usar,
sin importar si se produjo excepción o no.
finally {
if (lectorArchivo != null) {
lectorArchivo.close();
}
if (memoriaLector != null) {
memoriaLector.close();
}
}
}
}
-
Se compila y prueba la aplicación.
compilacion.shell
javac Main.java
java Main
archivo de prueba