Imagine a seguinte situação, foi aberta uma conexão com o banco de dados para realizar determinada ação, e no meio deste processo seja lançada alguma exceção, como por um exemplo NullPointerException ao tentar manipular um determinado atribuído de um objeto, a conexão até o momento com o banco de dados não seria fechada resultando desta maneira em conexão, sem que nenhuma ação fosse tomada para fechar tal conexão, neste caso seria necessário que mesmo sendo lançada uma exceção no meio do processo a conexão deve ser fechada.
Um outro exemplo bom seria abertura de determinado arquivo para escrita no mesmo, e no meio deste processo é lançada uma exceção por algum motivo, o arquivo não seria fechado, o que resultaria em deixa o arquivo aberto.
Quando uma exceção é lançada e é necessário que determinada ação seja tomada mesmo após a captura de uma exceção utilizamos a palavra reservada finally.
Sintaxe:
try{
//trecho de código que pode vir a lançar uma exceção
}
catch(tipo_excecao_1 e)
{
//ação a ser tomada
}
catch(tipo_excecao_2 e)
{
//ação a ser tomada
}
catch(tipo_excecao _n e)
{
//ação a ser tomada
}
finally{
//ação a ser tomada
}
Exemplo:
/***
*
* @author Robson Fernando Gomes
*
*/
public class aumentaFrase {
public static void main(String args[])
{
String frase = null;
String novaFrase = null;
try{
novaFrase = frase.toUpperCase();
} catch(NullPointerException e)
{
System.out.println("A frase inicial está nula, para solucionar tal problema, foi atribuído-lhe um valor default.");
frase = "Frase vazia";
}
finally
{
novaFrase = frase.toUpperCase();
}
System.out.println("Frase antiga: "+frase);
System.out.println("Frase nova: "+novaFrase);
}
}
Quando este código fosse executado o mesmo lançaria um NullPointerException, porém esta exceção será tratada desta vez, sendo a mesma capturada pelo
catch{...} e dentro deste bloco as devidas providências são tomadas, neste caso é atribuído um valor default à variável
frase.
Neste exemplo mesmo o código lançando uma exceção durante a sua execução e a mesma sendo capturada pelo catch, uma determinada ação será tomada no bloco
finally, neste caso tanto com a exceção ou não, será executada a linha "novaFrase = frase.toUpperCase();", tornando todas letras da frase maiúscula.
A saída deste programa seria a seguinte:
A frase inicial está nula, para solucionar tal problema, foi atribuído-lhe um valor default.
Frase antiga: Frase vazia
Frase nova: FRASE VAZIA