El finally es una instrucción muy útil para algunos casos. Por ejemplo, si accedes a una base de datos para recoger los datos de una consulta harias algo asi:
try
{
creo el Statement con el que hago la consulta.
ejecuto la consulta.
meto los datos en un resulset
leo el resulset
cierro el resulset
cierro el statement
}
catch (SQLException e)
{
instrucciones para controlar la excepcion
}
En este caso, si se da una sqlexception puede, por ejemplo, que el objeto Statement no se cierre, y la base de datos mantiene esa comunicación abierta porque el programa java nunca la cerrará ya que ha dado error. Y las bases de datos pueden tener un número limitado de comunicaciones con programas abiertas simultaneamente.
Pues seria interesante poner el cierre del Statement no en el try sino en un finally, para que siempre se ejecute, aqunque se de una excepción, ya que las lineas posteriores a la que ha producido la excepcion nunca se ejecutan.
Resumiendo: En un finally se debe poner aquello que siempre se deba ejecutar halla ido bien el programa o no.