Aula 8
Prof. Roberto Rosa
[email protected]

A partir de agora vamos aprender como ver qual é o erro que está
acontecendo em nosso projeto. Para isso, a primeira coisa que
precisamos entender é como utilizar os blocos tratadores, no caso o "try
catch".

Quando criamos um método em alguma linguagem de programação o
mesmo pode não estar apto para resolver ou detectar alguma falha que
venha a acontecer.

As exceções são lançadas para sinalizar alguma falha que tenha ocorrido.
Tal lançamento causa uma interrupção abrupta na execução do sistema.

A maior parte das linguagens de programação(principalmente as
Orientadas a Objetos) tem suporte para a utilização de exceções. O Java,
PHP, por exemplo são bons exemplos de linguagens com suporte ao
tratamento de Exceções.

Também podemos lançar exceções ou criar as nossas próprias exceções.
O Java por exemplo nos dá suporte para:

Representar uma exceção*

Uma forma para lançar a exceção (throw/throws)

Uma forma para tratar a exceção (try-catch-finally)
*No caso do Java as exceções são representadas por classes.

Exceções verificadas

subclasse de Exception

utilizadas para falhas iniciais

onde a recuperação talvez seja possível

Exceções não-verificadas

subclasse de RuntimeException

utilizadas para falhas não-antecipadas

onde a recuperação não é possível

A classe Throwable é o "vô" de todas as classes que representam um erro
ou uma exceção.

A partir dele podemos utilizar os principais métodos para saber o que
aconteceu de erro, problema, etc.

A imagem a seguir ilustra qual é a hierarquia básica das Exceções na
linguagem Java em especial.

Hierarquia de Exceções

Principais métodos

No Java são três os principais métodos que relatam a exceção ocorrida,
são eles:

void printStackTrace(): Lista a seqüência de métodos chamados até o
ponto onde aj exceção foi lançada.

String getMjessage() - Retorna uma mensagem que indica o que ocorreu
na exceção.

toString() - Esse método retorna uma breve descrição da exceção que
ocorreu.

Podemos lançar exceções a partir dos métodos. Para lançar uma exceção
a partir de um método deve ser utilizada a cláusula throws, conforme
Figura:

Podemos lançar exceções a partir dos métodos. Para lançar uma exceção
a partir de um método deve ser utilizada a cláusula throws, conforme
Figura:

Exemplo de lançamento de exceção através da cláusula throws

Clientes que capturam uma exceção devem proteger a chamada com um
bloco try. Qualquer número de instruções pode ser incluído em um bloco
try. A cláusula catch tentará capturar exceções geradas por qualquer
instrução dentro do try precedente.

Exemplo de blocos tratadores básico

Podemos também utilizar na maioria das linguagens 2 ou mais blocos de
"catch", conseguindo assim tratar 2 ou mais exceções a partir de um
único "try". A figura a seguir mostra como ficaria um "try" com dois
tratamentos de exceções especializados e o terceiro é um tratamento de
exceção genérico para qualquer tipo de exceção que não se enquadre nos
2 catchs iniciais.

Quando ocorre uma exceção, o java procura um bloco tratador
adequado. Os "catch" são checados em sequência, ou seja, o primeiro
catch que estiver tratando a exceção que ocorreu é executado. Após a
execução do catch, se houver outros catchs os mesmos não são
executados, porém o software continua com a sua execução normal após
o último bloco tratador.

Sempre cuide a ordem ao declarar os "catch's". Nunca podemos colocar
um bloco catch tratando Exception antes dos tratamentos de outras
Exceptions, isso porque Exception é pai de todas as outras exceções.

Exemplo de captura com mais de 1 catch

No Java a partir do JDK7 é possível a utilização de multi-catch, ou seja,
podemos inserir 2 ou mais exceções em um único catch.

Exemplo de blocos tratadores com multi-catch

Também podemos colocar dentro de um bloco try outro trycatch,
fazendo o tratamento de exceções de forma aninhada. Ao tratar de
forma aninhada podemos individualizar e especializar as mensagens de
erro, fazendo com que o usuário identifique exatamente o que ele
realmente errou.

A cláusula finally é opcional, ou seja, você pode criar um bloco tratador
try-catch sem finally. Se você optar por colocar a instrução finally ela será
sempre executada, mesmo que não ocorra uma exceção dentro do bloco
try.

Se ocorrer uma exceção no try, e não for capturada por nenhum catch,
mesmo assim o finally é executado

Se ocorrer uma exceção e a mesma for capturadda por algum catch,
mesmo assim o finally é executado.

Na prática o finally pode e deve ser utilizado para fechar conexões de
rede, conexão com o banco de dados, escrita e leitura de arquivos, entre
outros.

Exemplo de blocos tratadores com finally
Download

LINGUAGEM DE PROGRAMAÇÃO VISUAL II Prof. Roberto Rosa