domingo, 25 de julho de 2010

[Java] Uso das instruções try, catch e finally


O tratamento de exceções em Java ocorre transferindo a execução normal de um programa para o devido código de tratamento de exceções quando uma exceção ocorre. Para realizar o desvio da execução do programa utiliza-se as palavras chaves try, catch ou finally.

Instrução try

A sintaxe da instrução try se dá da seguinte forma:

try {
//código passível de exceções
}


Quando uma exceção é lançada em um bloco try o restante do código após à exceção é ignorado, transferindo o fluxo de execução para o tratamento dessa exceção.

Instrução catch

A instrução que captura (recebe) e trata da exceção lançada pela instrução try é a catch. Cada instrução try pode ter zero ou mais instruções catchs. A sintaxe de uma instrução catch é:

catch(<TipoDaExceção> <exceção>) {
//código de tratamento de exceção
}


Os blocos catchs devem ser posicionados logo após o término do bloco try, sem linhas de comando ou blocos entre eles. Assim como um bloco try e um catch devem ser dispostos juntos, dois blocos catchs também devem seguir este mesmo padrão. Deve-se atentar, porém, para a ordem dos blocos catchs. Blocos catchs devem ser dispostos de forma que primeiro estejam as exceções específicas e por último as gerais, pois quando uma exceção é lançada no bloco try, os blocos catchs são verificados um por um seguindo a sequencia das linhas do código. Assim se uma exceção específica for colocada após uma geral a específica nunca será executada.

Instrução finally

Apesar das instruções try e catch serem ótimas elas não são perfeitas. Quando uma exceção é lançada em uma instrução try, todo o restante do código é descartado e o fluxo é transferido para a instrução catch, assim se for necessário, por exemplo, de uma reinicialização de variáveis, ou desalocação de recursos. A instrução finally resolve este problema, pois será sempre excecutada após os comandos (a qualquer ponto) de um bloco try, lançando ou não uma exceção. A instrução finally é tão poderosa que até mesmo antes de um comando return do bloco try ela é executada. Desta forma, o bloco finally é o perfeito bloco para se fechar sockets, e realizar qualquer operação de limpeza que seu código necessite.

Comando try-catch-finally

Quando um bloco try é escrito, pelo um bloco catch ou finally deverá ser escrito. Como mostra a tabela abaixo:

try {}

-

-

INVÁLIDO

try {}

catch {}

-

VÁLIDO

try {}

finally {}

-

VÁLIDO

try{}

catch {}

finally{}

VÁLIDO

try{}

finally{}

catch {}

INVÁLIDO

catch {}

finally{}

-

INVÁLIDO

catch {}

-

-

INVÁLIDO

finally{}

catch {}

-

INVÁLIDO

finally{}

-

-

INVÁLIDO



4 comentários:

  1. Obrigada, às ordens, se houver alguma dúvida pode perguntar.

    ResponderExcluir
  2. Nossa adorei seu blog... fala sobre assuntos diversos e suas explicações são fáceis de entender.. So uma coisinha o design dele ta meio feiosinho.. mas o conteúdo ta de Parabéns... ;)

    ResponderExcluir
    Respostas
    1. O design não importa pra mim porque criei esse blog apenas com a intenção de documentar alguns estudos meus. :)

      Feito por mim e para mim. ;)

      Excluir