View
3
Download
0
Category
Preview:
Citation preview
JAVATópicos Especiais de Programação
Orientada a Objetos
1
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROSTRY CATCH
2
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
O que fazer quando algo inesperado acontece?
3
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
O que fazer quando algo inesperado acontece?
3
Com JAVA podemos nos prevenir!!!
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
O que acontecerá quando um método que você quiser chamar (provavelmente de uma classe que não criou) for perigoso?
4
você
seu código
escreve que usa métodos da
classe que você
não criou
1Suponhamos que você quisesse chamar um método de uma classe que não criou.
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
O que acontecerá quando um método que você quiser chamar (provavelmente de uma classe que não criou) for perigoso?
5
a classe que você não criou
void moo() {if (serverDown) {
explode();}
}
2Esse método faz algo arriscado, algo que pode não funcionar no tempo de execução.
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
O que acontecerá quando um método que você quiser chamar (provavelmente de uma classe que não criou) for perigoso?
6
3Você precisa saber se o método que está chamando é perigoso.
você
classe que você
não criou
Meu método moo() será
interrompido se o servidor travar.
Será que esse método pode
travar?
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
O que acontecerá quando um método que você quiser chamar (provavelmente de uma classe que não criou) for perigoso?
7você
seu código
escreve com segurança
4Em seguida, você escreverá um código que consiga manipular a falha, se ela realmente ocorrer. É preciso estar preparado, para o caso de acontecer.
Agora que eu sei, posso tomar
precauções.
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
Moral da história: Previna-se
8
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei” ao código que os chamou.O mecanismo de manipulação de exceções do Java é uma maneira simples e clara de lidar com as exceções que podem surgir no tempo de execução.Ele se baseia no fato de você saber que o método que está sendo chamado é perigoso, o que te permite criar um código que trate essa possibilidade.
Mas como saber se um método lança uma exceção?
9
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei” ao código que os chamou.O mecanismo de manipulação de exceções do Java é uma maneira simples e clara de lidar com as exceções que podem surgir no tempo de execução.Ele se baseia no fato de você saber que o método que está sendo chamado é perigoso, o que te permite criar um código que trate essa possibilidade.
Mas como saber se um método lança uma exceção?
9
Através da cláusula throws na declaração do método.
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
10
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
Através de um bloco Try Catch é possível informar ao compilador que você estará tratando esta exceção. O compilador não se importará com a maneira como você manipulará; o importante é que você informe que está cuidando do problema.
11
try {//código a ser executado
} catch (Exceção) {//código de tratamento de erro
}finally {//código sempre executado
}
Sintaxe:
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
12
public class TratativaDeErros {
public static void main(String[] args) { int[] array = {0, 1, 2, 3, 4, 5}; for (int i=0; i<10; i++) { array[i] += i; System.out.println("array[" + i + "] = " + array[i]); } System.out.println("Laço executado com sucesso."); }}
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
13
public class TratativaDeErros { public static void main(String[] args) { int[] array = {0, 1, 2, 3, 4, 5}; try {
for (int i=0; i<10; i++) { array[i] += i; System.out.println("array[" + i + "] = " + array[i]); } System.out.println("Laço executado com sucesso.");
} catch (ArrayIndexOutOfBoundsException e) { System.out.println("Acessou um índice inexistente."); } catch (Exception e) { System.out.println("Outro tipo de exceção."); } finally { System.out.println("Isto SEMPRE executa."); } }}
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
14
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
14
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
15
O que é uma exceção?!?!?!Uma exceção é um objeto... De tipo Exception.
Throwable
getMessage()printStrackTrace()
Exception
InterruptedExceptionIOException
Parte da hierarquia da classe Exception. Todas as classes estendem a classe Throwable e herdam dois métodos-chaves.
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
16
Existem 3 diferentes tipos de erros:
•Erro de Runtime (java.lang.Runtime)•Erro de Sistema (java.lang.Error)•Erro Customizado (java.lang.Exception)
Os erros de Runtime são causados por bugs do programa, que desconhecemos, ou seja, uma condição especial que sequer havíamos imaginado. Os erros de Runtime são subclasses da classe Runtime, que é subclasse de Exception.
Os erros de sistema são erros imprevisíveis, causados por falha do sistema, como acesso a disco, erro do banco de dados e etc. Estes erros são subclasses da classe Error.
E os erros Customizados são erros ou condições especiais previstas no programa. Esses erros são subclasse da classe Exception.
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
17
1
Mas realmente como funciona o “lançamento” de uma exceção?
Código perigoso que lança uma exceção:
public void takeRisk() throws BadException {if (abandonAllHope) {throw new BadException();
}}
Cria um novo objeto Exception e o lança.
Informa para todos o tipo de exceção que pode ser lançada.
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
18
2 Seu código que chama o método perigoso:
public void crossFingers() {try {anObject.takeRisk();
} catch (BadException ex) {System.out.println(“Ai não!!!”);ex.printStackTrace();
}}
Se você não conseguir se recuperar da exceção, pelo menos execute um restreamento de pilha, usando o método printStackTrace() que todas as exceções herdam.
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
19
Um método pode lançar mais de um tipo de exceção, mas a delcaração de um método deve incluir todas as exceções verificadas que ele pode lançar. Porém se duas ou mais exceções tiverem a mesma superclasse, o método poderá declarar apenas a superclasse.public class Lavanderia {
public void lavarRoupas() throws CalcaException, LingerieException {//código
}}public class Foo {
public void go() {Lavanderia lavanderia = new Lavanderia();try {
lavanderia.lavarRoupas();} catch (CalcaException cex) {
//tratativa} catch (LingerieException lex) {
//tratativa}
}}
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
20
As exceções são Polimórficas.
Exception
RoupaExceptionIOException
CalcaException LingerieException CamisaException
CamisaSocialExceptionCamisetaException
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
21
As exceções são Polimórficas.
Você pode declarar exceções usando um supertipo das exceções que lançar.
public void lavarRoupas() throws RoupaException {
Você pode capturar exceções usando um supertipo da exceção lançada.
try {lavanderia.lavarRoupas();
} catch (RoupaException rex) {//tratativa
}
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
22
Só porque você pode capturar tudo com um superbloco catch polimórfico, não quer dizer que sempre deva fazê-lo.
try {lavanderia.lavarRoupas();
} catch (Exception ex) {//tratativa
}
Esse bloco catch capturará QUALQUER exceção, portanto, você não saberá automaticamente o que deu errado.
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
23
Crie blocos diferentes para cada tipo de exceção que você tiver que manipular exclusivamente.
try {lavanderia.lavarRoupas();
} catch (CamisetaException cex) {//tratativa de Camiseta
} catch (LingerieException lex) {//tratativa de Lingerie
} catch (RoupaException rex) {//tratativa das demais exceções
}
Todas as outras exceções serão tratadas aqui.
Tratativas específicas
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
24
Mas cuidado! Você não pode colocar cestas de roupas maiores em cima de cestas menores!
try {lavanderia.lavarRoupas();
} catch (RoupaException rex) {//tratativa das demais exceções
} catch (LingerieException lex) {//tratativa de Lingerie
} catch (CamisetaException cex) {//tratativa de Camiseta
}
O tamanho é importante quando temos vários blocos catch. O de cesta maior tem que ficar no final. Caso contrário, os de cestas menores serão inúteis.
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
25
E como eu faço para criar minha própria classe de exceção?
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
26
Através do uso do Polimorfismo, basta criar sua classe e estendê-la a partir da classe Exception. Repare que como a classe herda as características da classe Exception, onde há o construtor que recebe como parâmetro um valor em String contendo a mensagem do erro, representada pela variável, da superclasse msg. Isto serve para ser usada o método getMessage() da classe Exception.
public class CalcaException extends Exception {
public CalcaException() {super();
}
public CalcaException(String msg) {super( msg );
}
}
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
27
Mas e se eu não quiser tratar o erro, o que eu faço? Deixe para que outra pessoa trate por você!Quando você não quiser manipular, você pode desviar-se dela.
public class Foo {public void go() throws RoupaException {
Lavanderia lavanderia = new Lavanderia();lavanderia.lavarRoupas();
}}
Mas lembre-se: Desviar o erro apenas retarda o inevitável.
sexta-feira, 28 de setembro de 12
TRATAMENTO DE ERROS
27
Mas e se eu não quiser tratar o erro, o que eu faço? Deixe para que outra pessoa trate por você!Quando você não quiser manipular, você pode desviar-se dela.
public class Foo {public void go() throws RoupaException {
Lavanderia lavanderia = new Lavanderia();lavanderia.lavarRoupas();
}}
Mas lembre-se: Desviar o erro apenas retarda o inevitável.
sexta-feira, 28 de setembro de 12
BIBLIOGRAFIA
28
•Introdução ao Java, Daniel Destro do Carmo•Use a Cabeça Java, Kathy Sierra e Bert Bates•Certificação Sun para Programador Java 6, Kathy Sierra e Bert Bates
sexta-feira, 28 de setembro de 12
OBRIGADO
29
PROF. EMILIO PARMEGIANI
DOWNLOAD DO MATERIAL
sexta-feira, 28 de setembro de 12
Recommended