Manejo de excepciones en Java
โก Resumen inteligente
Java El manejo de excepciones proporciona un mecanismo estructurado para gestionar los errores en tiempo de ejecuciรณn que interrumpen el flujo normal del programa. Utiliza las palabras clave try, catch, finally, throw y throws para detectar, aislar y recuperarse de condiciones excepcionales mientras mantieneping Aplicaciones robustas y predecibles.

ยฟQuรฉ es una excepciรณn en Java?
An Excepciรณn en Java es un evento que interrumpe la ejecuciรณn de las instrucciones del programa y altera el flujo normal de ejecuciรณn del programa. Es un objeto que encapsula la informaciรณn de un evento de error que ocurriรณ dentro de un mรฉtodo y se pasa al sistema de tiempo de ejecuciรณn. En JavaLas excepciones se utilizan principalmente para seรฑalar diferentes tipos de condiciones de error, de modo que los desarrolladores puedan responder a ellas de forma controlada.
Existen dos grandes categorรญas de errores en Java:
- Errores de tiempo de compilaciรณn
- Errores de tiempo de ejecuciรณn
Los errores de compilaciรณn se pueden clasificar en dos tipos adicionales:
- Errores de sintaxis
- Errores semรกnticos
Ejemplo de errores de sintaxis:
En lugar de declarar int a; lo declaraste por error como in a;, para lo cual el compilador generarรก un error.
Ejemplo de errores semรกnticos: Has declarado una variable int a; y despuรฉs de algunas lรญneas de cรณdigo vuelves a declarar un nรบmero entero como int a;Todos estos errores se resaltan al compilar el cรณdigo.
Ejemplo de errores de tiempo de ejecuciรณn
Un error de tiempo de ejecuciรณn se denomina ExcepciรณnEs cualquier evento que interrumpe el flujo normal de ejecuciรณn del programa. Ejemplos de excepciones incluyen excepciรณn aritmรฉtica, NullPointerException, excepciรณn de divisiรณn por cero y muchas mรกs. Excepciones en Java Son condiciones que a menudo escapan al control directo del desarrollador.
Haga clic en aquรญ si el video no es accesible
ยฟPor quรฉ necesitamos el manejo de excepciones?
Supongamos que has codificado un programa para acceder a un servidor. Todo funciona bien mientras estรกs desarrollando.ping el cรณdigo en un entorno local con condiciones controladas.
Durante una ejecuciรณn de producciรณn real, el servidor puede estar caรญdo. Cuando su programa intenta acceder a รฉl, se produce una excepciรณn y, sin un manejo adecuado, el programa finalizarรก abruptamente.
Cรณmo manejar una excepciรณn en Java
Hasta ahora hemos visto que una excepciรณn a menudo estรก fuera del control de un desarrollador. Sin embargo, culpar a problemas ambientales de fallas en el cรณdigo no es una soluciรณn real. Se necesita una programaciรณn robusta que se ocupe de situaciones excepcionales. Dicho cรณdigo se conoce como Manejador de excepciones.
En nuestro ejemplo, un buen manejo de excepciones implicarรญa que, cuando el servidor principal no estรฉ disponible, el programa se conecte automรกticamente a un servidor de respaldo.
Para implementar esto, podrรญas escribir cรณdigo para conectarte al servidor usando condiciones if y else tradicionales. Verificarรกs si el servidor estรก caรญdo y, si es asรญ, escribirรกs cรณdigo para conectarte al servidor de respaldo. Esta organizaciรณn del cรณdigo usando ramas "if" y "else" no es efectiva cuando tu cรณdigo tiene mรบltiples Java excepciones manejar.
class connect{ if(Server Up){ // code to connect to server } else{ // code to connect to BACKUP server } }
Prueba Catch Block en Java
Java Proporciona un mecanismo integrado de gestiรณn de excepciones que separa la lรณgica normal de la lรณgica de recuperaciรณn de errores.
- El cรณdigo normal entra en un Prueba bloquear.
- El cรณdigo de manejo de excepciones va al CAPTURAS bloquear.
En nuestro ejemplo, el bloque TRY contendrรก el cรณdigo para conectarse al servidor. El bloque CATCH contendrรก el cรณdigo para conectarse al servidor de respaldo. Si el servidor estรก activo, el cรณdigo del bloque CATCH se ignorarรก. Si el servidor estรก inactivo, se generarรก una excepciรณn y se ejecutarรก el cรณdigo del bloque CATCH.
Asรญ es como se maneja una excepciรณn en Java.
Sintaxis para usar try y catch
try{ statement(s) } catch (exceptiontype name){ statement(s) }
Ejemplo de bloque Try Catch
Paso 1) Copie el siguiente cรณdigo en un editor.
class JavaException { public static void main(String args[]){ int d = 0; int n = 20; int fraction = n/d; System.out.println("End Of Main"); } }
Paso 2) Guarda el archivo y compila el cรณdigo. Ejecuta el programa usando el comando java. JavaExcepciรณn.
Paso 3) Se muestra una excepciรณn aritmรฉtica, divisiรณn por cero, en la lรญnea 5, y la lรญnea 6 nunca se ejecuta.
Paso 4) Ahora examinemos cรณmo try y catch nos ayudarรกn a manejar esta excepciรณn. Colocaremos la lรญnea de cรณdigo que causa la excepciรณn en un bloque try-catch. try bloque, seguido de un catch bloque. Copie el siguiente cรณdigo en el editor.
class JavaException { public static void main(String args[]) { int d = 0; int n = 20; try { int fraction = n / d; System.out.println("This line will not be Executed"); } catch (ArithmeticException e) { System.out.println("In the catch Block due to Exception = " + e); } System.out.println("End Of Main"); } }
Paso 5) Guarda, compila y ejecuta el cรณdigo. Obtendrรกs el siguiente resultado.
Como puede observar, la excepciรณn se maneja y la รบltima lรญnea de cรณdigo tambiรฉn se ejecuta. Ademรกs, tenga en cuenta que la lรญnea 7 no se ejecutarรก porque Tan pronto como se genera una excepciรณn, el flujo de control salta al bloque catch.
Nota: El objeto ArithmeticException โeโ contiene informaciรณn sobre la excepciรณn que se ha producido, lo que puede resultar รบtil a la hora de tomar medidas de recuperaciรณn.
Java Jerarquรญa de clases de excepciรณn
Tras la ejecuciรณn de una instrucciรณn catch, las demรกs se omiten y la ejecuciรณn continรบa despuรฉs del bloque try-catch. Los bloques catch anidados deben seguir la jerarquรญa de excepciones, desde la subclase mรกs especรญfica hasta la clase padre mรกs general.
- Todas las clases de excepciรณn en Java Extiende la clase Throwable. Throwable tiene dos subclases, Error y Exception.
- La clase Error define las excepciones o problemas que no se espera que ocurran en circunstancias normales en su programa, por ejemplo, un error de memoria, un error de hardware o un error de la JVM.
- La clase Exception representa las excepciones que puede manejar su programa, y โโsu programa puede recuperarse de estas excepciones utilizando bloques try y catch.
- RuntimeException es una subclase de la clase Exception. Las excepciones de este tipo representan excepciones no controladas que ocurren en tiempo de ejecuciรณn y no pueden detectarse en tiempo de compilaciรณn. Buenos ejemplos son la excepciรณn de divisiรณn por cero y la excepciรณn de puntero nulo.
- Se genera una excepciรณn IOException durante las operaciones de entrada y salida.
- Excepciรณn interrumpida en Java Se genera durante operaciones multihilo cuando se interrumpe un hilo.
Ejemplo: Anidamiento de bloques try y catch
Paso 1) Copie el siguiente cรณdigo en un editor.
class JavaException { public static void main(String args[]) { try { int d = 1; int n = 20; int fraction = n / d; int g[] = { 1 }; g[20] = 100; } /*catch(Exception e){ System.out.println("In the catch block due to Exception = "+e); }*/ catch (ArithmeticException e) { System.out.println("In the catch block due to Exception = " + e); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("In the catch block due to Exception = " + e); } System.out.println("End Of Main"); } }
Paso 2) Guarda el archivo y compila el cรณdigo. Ejecuta el programa usando el comando, Java JavaExcepciรณn.
Paso 3) Se genera una excepciรณn ArrayIndexOutOfBoundsException. Cambie el valor de int d a 0. Guarde, compile y ejecute el cรณdigo.
Paso 4) Se debe generar una ArithmeticException.
Paso 5) Elimine los comentarios de las lรญneas 10 a 12. Guarde, compile y ejecute el cรณdigo.
Paso 6) ยฟError de compilaciรณn? Esto se debe a que Exception es la clase base de ArithmeticException. Cualquier excepciรณn que genere ArithmeticException tambiรฉn puede ser manejada por la clase Exception. Por lo tanto, el bloque catch de ArithmeticException nunca se ejecutarรก, lo que lo vuelve redundante. De ahรญ el error de compilaciรณn.
Java Finalmente bloquear
El bloque final es ejecutado independientemente de que se plantee una excepciรณn en el bloque de prueba. Es opcional Para usar con un bloque try. El bloque finally es el lugar adecuado para liberar recursos como conexiones a bases de datos, archivos o sockets de red.
try { statement(s) } catch (ExceptiontType name) { statement(s) } finally { statement(s) }
Si se produce una excepciรณn en el bloque try, el bloque finally se ejecuta despuรฉs de que finalice el bloque catch.
Ejemplo de bloque finally
Paso 1) Copie el siguiente cรณdigo en un editor.
class JavaException { public static void main(String args[]){ try{ int d = 0; int n =20; int fraction = n/d; } catch(ArithmeticException e){ System.out.println("In the catch block due to Exception = "+e); } finally{ System.out.println("Inside the finally block"); } } }
Paso 2) Guarda, compila y ejecuta el cรณdigo.
Paso 3) Resultado esperado: El bloque finally se ejecuta aunque se produzca una excepciรณn.
Paso 4) Cambia el valor de la variable d = 1. Guarda, compila y ejecuta el cรณdigo, y observa el resultado.
Mejores prรกcticas para Java Manejo de excepciones
Seguir algunas reglas comprobadas te ayudarรก a mantenerte Java Cรณdigo robusto, legible y fรกcil de depurar:
- Captura primero la excepciรณn mรกs especรญfica y luego las mรกs generales, para preservar la integridad de la jerarquรญa de excepciones.
- Evite los bloques catch vacรญos. Como mรญnimo, registre la excepciรณn para que nunca se pierda la causa raรญz.
- Utilice el bloque finally o intente con los recursos para liberar archivos, sockets y conexiones a la base de datos.
- Lanza excepciones comprobadas solo cuando quien realiza la llamada pueda recuperarse razonablemente, y utiliza excepciones no comprobadas para errores de programaciรณn.
- Envuelva las excepciones de bajo nivel en una excepciรณn de negocio significativa para mantener la coherencia de la API.tracEstรก limpio.
- Nunca ignores silenciosamente una InterruptedException en cรณdigo multihilo; en su lugar, restaura el indicador de interrupciรณn.







