La cláusula finally forma parte del bloque try / catch y sirve para especificar un bloque de código que se ejecutará tanto si se lanza la excepción como si no.
Puede servir para liberar recursos externos (descriptores de fichero, por ejemplo y su sintaxis es try / catch / finally.

Aquí vamos a ver un ejemplo:

public class Final {

static void proc1(){

try{
System.out.println(«en el try del proc1»);
throw new RuntimeException(«demo»);

}finally{
System.out.println(«Finally del proc1»);
}
}

//Return from with in a try block.
static void proc2(){

try{
System.out.println(«en el try del proc2»);
return;
}
finally{
System.out.println(«Finally del proc2»);
}
}

//Execute a try block normally.
static void proc3(){

try{
System.out.println(«en el try del proc3»);
}
finally{
System.out.println(«Finally del proc3»);
}
}

public static void main(String[] args) {

try{
proc1();
}catch(Exception e){
System.out.println(«Exception caught»);

}

proc2();
proc3();

}

}
Salida:
en el try del proc1
Finally del proc2
Exception caught
en el try del proc2
Finally del proc2
en el try del proc3
Finally del proc3