Pesquisar este blog

domingo, 21 de abril de 2013

Tratamento de Exceções no Java

Excecoes - Continuacao

Finally

E quando acontece uma excecao em nosso código e tratamos ela, mas mesmo assim ainda temos que fazer algo?

try{
   //Abrimos uma conexao com o banco
   //e vamos salvar um registro, mas e quando acontece uma excecao?
   //ponto 1
} catch(Exception e){
  //Quando a chave do banco e violada, uma exceção será disparada.
  //aqui tratamos a ela.
  //ponto 2

Tudo bem, mas e quando acontece uma exceção, como fica a conexão com o banco de dados?
Bom se fecharmos a conexão no ponto 1, ela nunca sera fechada quando acontecer uma excecao, voce ate pode pensar que a exceção pode ser fechada no ponto 2. 
Ok, mas neste caso, só passamos ali quando acontece uma exceção, e mais para fechar uma conexão com o banco devemos verificar se ela ainda está aberta, neste caso esta lógica ficaria em dois lugares, no ponto 1 e no ponto 2.
Mas e se temos que tratar mais de um tipo de excecao, vamos ter que tentar fechar a conexão com o banco a cada exceção tratada?
Isso nao faz muito sentido certo, bom pra isso e que serve o bloco finally, este bloco vem depois do catch e sempre sera executado, mesmo quando acontecer uma exceção
Aqui é o melhor lugar para colocarmos o código que finaliza a conexão com o banco de dados.

try{
   //Abrimos uma conexao com o banco
   //e vamos salvar um registro, mas e quando acontece uma exceção?
   //ponto 1
} catch(Exception e){
  //Quando a chave do banco e vialoda, uma exceção e disparada.
  //aqui tratamos a exceção.
  //ponto 2
}finally {
  //Aqui fechamos a conexão com o banco, pois esta parte sempre sera executada.
}

Até agora vimos duas maneiras de usar o try em nosso código, a primeira foi usando o try/catch e a segunda usando o try/catch/finally, mas existem três formas de usarmos o try.
A terceira maneira de usar o try é a seguinte:

try{
  //Código
} finally {
 // código que sempre será executado
}

Usando somente o try e o finally a sequência de execução é a mesma, ele executará o código do try, e mesmo quando acontecer uma exceção o código dentro do finally será executado.
O código é executado na mesma sequência que ele é disposto, primeiro o código do try e depois o código do finally.
A sequência de execução do código try é sempre a seguinte, primeiro o código do try é executado, logo após é a vez do código do catch, caso ele esteja presente, logo depois será a vez de executar o código do finally, caso ele esteja presente.

Exercícios:
1) Determine o que acontece com a execução de um código, quando uma exceção é disparada dentro de uma sequência contendo try e finally. Onde esta exceção deve ser tratada? Para onde vai a execução do código depois que uma exceção é disparada?

2) Dado os códigos abaixo, o que acontece quando uma exceção é disparada no ponto 1?


public void metodoExcecao(){
try{
Ponto 1
} finally {
Ponto 2
}
Ponto 3


public void metodoExcecao(){
try{
Ponto 1
} catch(Exception e){
Ponto 2
} finally {
Ponto 3
}

Ponto 4

Qual será a sequencia de execução dos códigos, onde ele passa e onde ele não passa?


Nenhum comentário:

Postar um comentário