Para que un programa Java sea lo más robusto posible, debe ser capaz de manejar excepciones. El compilador hace su parte al no permitirle compilar un programa hasta que sea sintácticamente correcto y también puede señalar excepciones comprobadas que deben manejarse. Pero las excepciones que probablemente causen más dolores de cabeza son las que aparecen una vez que el programa se está ejecutando. Para ayudar a manejar estas excepciones, el lenguaje Java proporciona los bloques try-catch-finally.
los
tratarel bloque encierra cualquier declaración que pueda causar una excepción. Por ejemplo, si está leyendo datos de un archivo utilizando el
FileReaderclase, se espera que manejes el
IOExceptionsasociado con el uso de un
FileReaderobjeto, por ejemplo,
FileNotFoundExceptiony
IOException. Para asegurarse de que esto suceda, puede colocar las declaraciones que se ocupan de crear y usar el
FileReaderobjeto dentro de un
tratarbloque: Sin embargo, el código está incompleto porque, para que se maneje la excepción, necesitamos un lugar para que se capture. Esto sucede en el
los
capturalos bloques proporcionan un lugar para manejar la excepción generada por las declaraciones dentro de un
tratarbloquear. los
capturael bloque se define directamente después del
tratarbloquear. Debe especificar el tipo de excepción que está manejando. Por ejemplo, el
FileReaderEl objeto definido en el código anterior es capaz de arrojar un
FileNotFoundExceptiono un
IOException. Podemos especificar dos
capturabloques para manejar ambas excepciones: en el
FileNotFoundExceptioncatchbloqueamos podríamos colocar un código para pedirle al usuario que encuentre el archivo por nosotros y luego intente leer el archivo nuevamente. En el
IOExceptioncatch block, podríamos pasar el error de E / S al usuario y pedirle que pruebe otra cosa. De cualquier manera, hemos proporcionado una forma para que el programa detecte una excepción y la maneje de manera controlada.
capturabloquear. Si el código que quisiéramos colocar en los dos
capturalos bloques anteriores eran exactamente los mismos, podríamos escribir el código de esta manera: para hacer un poco de limpieza en lo que respecta a los recursos, podemos agregar un bloque finalmente. Después de todo, queremos publicar el archivo que hemos estado leyendo una vez que hayamos terminado.
Las declaraciones en el bloque finalmente siempre se ejecutan. Esto es útil para limpiar recursos en caso de que el bloque try se ejecute sin una excepción y en los casos en que haya una excepción. En ambas eventualidades, podemos cerrar el archivo que hemos estado usando.
El último bloque aparece directamente después del último bloque de captura: