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.
}
}
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