El bloque Scala finalmente se usa para ejecutar código importante, como cerrar la conexión, transmitir o liberar recursos (puede ser un archivo, conexión de red, conexión de base de datos, etc.). Siempre se ejecutará sin importar si se lanza una excepción o no. El bloque «finally» se ejecutará después de los bloques » try » y «catch «, pero antes de que el control vuelva a su origen.
Sintaxis:
try { //your scala code here } finally { println("this block of code is always executed") // your scala code here, such as to close a database connection }
En este caso, no importa si ocurre una excepción en el bloque try o no, finalmente siempre se ejecutará. Pero el flujo de control dependerá de si se ha producido una excepción en el bloque de prueba o no.
- Excepción generada: el flujo de control se bloqueará finalmente seguido del mecanismo de manejo de excepciones predeterminado si se ha producido una excepción en el bloque de prueba.
Ejemplo:// Scala program to demonstrate
// control flow of try-finally clause
// when exception occur in try block
// Creating object
object
GFG
{
// Main method
def
main(args
:
Array[String])
{
var
arr
=
new
Array[Int](
4
)
try
{
var
i
=
arr(
4
)
// this statement will never execute
// as exception is raised by above statement
println(
"Inside try block"
)
}
finally
{
println(
"finally block executed"
)
}
// rest program will not execute
println(
"Outside try-finally clause"
)
}
}
Producción:
finally block executed
- Excepción no planteada: el flujo de control se bloqueará finalmente seguido del resto del programa si no se produce una excepción en el bloque de prueba.
Ejemplo:// Scala program to demonstrate
// control flow of try-finally clause
// when exception doesn't occur in try block
// Creating object
object
GFG
{
// Main method
def
main(args
:
Array[String])
{
try
{
val
str
1
=
"123"
.toInt
// this statement will execute
// as no any exception is raised
// by above statement
println(
"Inside try block"
)
}
finally
{
println(
"finally block executed"
)
}
// rest program will be executed
println(
"Outside try-finally clause"
)
}
}
Producción:
Inside try block finally block executed Outside try-finally clause
La palabra clave finalmente se usa en asociación con un bloque try/catch y garantiza que se ejecutará una sección de código, incluso si se lanza una excepción.
Ejemplo :
// Scala program of try-catch-finally clause // Creating object object GFG { // Main method def main(args:Array[String]) { try { // create array var array = Array(4, 2, 7) var b = array(5) } catch { // Catch block contain cases. case e: ArithmeticException => println(e) case ex: Exception => println(ex) case th: Throwable=> println("unknown exception"+th) } finally { // Finally block will execute println("this block always executes") } // rest program will execute println(" rest of code executing") } }
Producción
java.lang.ArrayIndexOutOfBoundsException: 5 this block always executes Rest of code executing
En el ejemplo anterior, creamos una array en el bloque de prueba y desde esa array asignamos el valor a la variable b, pero arroja una excepción porque el índice de la array que estamos usando para asignar el valor a la variable b, es decir, está fuera del rango de los índices de la array. catch block captura esa excepción e imprime el mensaje y finalmente el bloque siempre se ejecuta sin importar qué.
Publicación traducida automáticamente
Artículo escrito por PREMMAURYA y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA