Prof. Roberto Rosa [email protected] Aula 8. A partir de agora vamos aprender como ver qual é...
Transcript of Prof. Roberto Rosa [email protected] Aula 8. A partir de agora vamos aprender como ver qual é...
Aprendendo a trabalhar com Exceções
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".
Aprendendo a trabalhar com Exceções
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.
Aprendendo a trabalhar com Exceções
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.
Aprendendo a trabalhar com 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.
Categoria de Exceções
Exceções verificadas
subclasse de Exception
utilizadas para falhas iniciais
onde a recuperação talvez seja possível
Categoria de Exceções
Exceções não-verificadas
subclasse de RuntimeException
utilizadas para falhas não-antecipadas
onde a recuperação não é possível
Hierarquia de Exceções
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
Hierarquia de Exceções
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.
Cláusula Throws
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:
Cláusula Throws
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
Blocos Try Catch
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.
Blocos Try Catch
Exemplo de blocos tratadores básico
Capturando Múltiplas Exceções
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.
Capturando Múltiplas Exceções
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.
Capturando Múltiplas Exceções
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.
Capturando Múltiplas Exceções
Exemplo de captura com mais de 1 catch
Multi-catch no Java
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.
Multi-catch no Java
Exemplo de blocos tratadores com multi-catch
Aninhamento de Exceções
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
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.
A cláusula finally
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.
A cláusula finally
Exemplo de blocos tratadores com finally