10.ControledeExceções
-
Upload
marcio-jose -
Category
Documents
-
view
216 -
download
0
Transcript of 10.ControledeExceções
-
7/23/2019 10.ControledeExcees
1/52
1
Java Standard Edition (JSE)
10. Controle de Excees
Esp. Mrcio PalhetaGtalk: [email protected]
-
7/23/2019 10.ControledeExcees
2/52
2
Ementa
10. Controle de Excees; 11. O pacote java.lang; 12. O pacote java.io; 13. Collection Framework e Generics; 14. Threads; 15. Sockets; 16. Tipos especiais: Enum;
17. Ferramentas jar e javadoc;
-
7/23/2019 10.ControledeExcees
3/52
3
Agenda
Introduo ao controle de excees; Tipos de controle; Pilha de execuo; Tratamento de excees; Tipos de exceo: Checked e Unchecked Lanamento de excees; Construtores de excees;
Excees especializadas;
-
7/23/2019 10.ControledeExcees
4/52
4
Cenrio 01 Mtodo sacar()
Imaginemos a classe ContaBancaria eseu mtodo sacar(); O que acontece quando tentamos sacar
um valor maior que o nosso limite?
-
7/23/2019 10.ControledeExcees
5/52
5
Operao de saque
O sistema mostra uma mensagem deerro(no console) mas o que acontece com quem chamou
o mtodo sacar() ? Como avisar que a operao NO foi
realizada com sucesso? Se o saque no for realizado, o usurio
deve ser avisado do problema;
-
7/23/2019 10.ControledeExcees
6/52
6
Chamada vlida ou invlida?
O que acontece no trecho de cdigo aseguir? Algum problema? Sem conhecer o mtodo sacar(), voc
afirmaria que ele foi executado comsucesso?
-
7/23/2019 10.ControledeExcees
7/52
7
Como melhorar acomunicao entre as classes?
Em sistemas reais, muito comum quequem saiba tratar o erro aquele quechamou o mtodo sacar();
A soluo tradicional retornar umvalor booleano, a fim de informar quehouve um erro no processamento;
Com isso, a responsabilidade de tratar oerro que ocorreu passa para quem
chama o mtodo sacar();
-
7/23/2019 10.ControledeExcees
8/52
8
Melhorando a chamada
Que tal a nova chamada?
Ops! Temos que lembrar de tratar o
retorno do mtodo. Isso bom? E se o caixa eletrnico esquecesse de
testar o tipo de retorno?
-
7/23/2019 10.ControledeExcees
9/52
9
E os outros erros?
Mesmo que estejamos tratando o tipode retorno do mtodo sacar, o queaconteceria se tentssemos sacar um
valor negativo?A soluo instantnea mudar o tipo
de retorno de boolean para int; Mas...qual seria a consequncia de usar
os magic numbers?
-
7/23/2019 10.ControledeExcees
10/52
10
Como tratar os erros?
Precisamos de uma forma de tratarsituaes especiaisque possam gerarerros;
Da, surge o conceito de EXCEO; Exceo representa uma situao que
normalmente no, sendo algo deestranho ou inesperado no sistema.
-
7/23/2019 10.ControledeExcees
11/52
11
Cenrio 02 execuo devrios mtodos
-
7/23/2019 10.ControledeExcees
12/52
12
Entendendo as chamadas
O mtodo main chama metodo1 quechama o metodo2; O que ocorre com as variveis de cada
mtodo? Como a execuo de cada mtodo
controlada de forma separada? Como fica a memria?
-
7/23/2019 10.ControledeExcees
13/52
13
Pilha de execuo (stack)
Toda invocao de um mtodo empilhada em uma estrutura dememria;
Cada mtodo tem sua prpria rea; Quando um mtodo termina, sai da
pilha e a execuo retorna para omtodo que o chamou;
-
7/23/2019 10.ControledeExcees
14/52
14
Pilha de execuo
Graficamente, podemos representar apilha de execuo do nosso trecho decdigo com a figura a seguir:
-
7/23/2019 10.ControledeExcees
15/52
15
Mas...nem tudo perfeito
O metodo2 possui um problema: esttentando acessar um ndice de arrayindevido;
o ndice estar fora dos limites do arrayquando chegar em 5;
Rode o cdigo. Qual a sada? O que isso representa?
O que ela indica?
-
7/23/2019 10.ControledeExcees
16/52
16
Rastro de pilha - stacktrace
-
7/23/2019 10.ControledeExcees
17/52
17
Excees em JAVA
Quando uma exceo lanada(throws), a JVM verifica se o mtodotomou algum cuidado ao tentar
executar esse trecho de cdigo; Como metodo2 no trata o erro, a JVM
aborta a execuo do metodo2 e voltaum nvel(stackframe), retornando execuo do metodo1;
-
7/23/2019 10.ControledeExcees
18/52
18
Seguindo na pilha Como metodo1 no trata nenhum
problema chamado ArrayIndexOutOfBoundsException,a execuo de metodo1 tambm encerrada abruptamente;
A JVM segue na pilha de execuo echega ao mtodo main, onde percebe
que tambm no h tratativa para aexceo lanada;A aplicao encerrada de forma
inesperada;
-
7/23/2019 10.ControledeExcees
19/52
19
Tratamento das excees
O erro de acesso indevido ao ndice deum array seria resolvido com length; Porm, a fim de entendermos o
controle do fluxo de uma Exceo,vamos tentar(try) executar o bloco de
comandos e pegar (catch) a exceoArrayIndexOutOfBoundsException.
-
7/23/2019 10.ControledeExcees
20/52
20
Atualizao de metodo2()
-
7/23/2019 10.ControledeExcees
21/52
21
Resultado da execuo
-
7/23/2019 10.ControledeExcees
22/52
22
Itens a considerar
O que mudou?A partir do momento em que a exceo
foi tratada(catched), a execuo doprograma volta ao normal;
A execuo reinicia na linha localizada
aps o bloco try-catch
-
7/23/2019 10.ControledeExcees
23/52
23
Outra exceo de Runtime
-
7/23/2019 10.ControledeExcees
24/52
24
Excees no-checadas Como poderamos evitar excees como
ArrayIndexOutOfBoundsException ouNullPointerException?
Em ambos os casos, o erro poderia serevitado pelo programador; por isso que voc no obrigado a
usar o bloco try-catch; Essas excees so chamadas de
Unchecked
-
7/23/2019 10.ControledeExcees
25/52
25
Unchecked Exceptions
O compilador no precisa checar seuma determinada exceo est sendotratada pelo programador;
No h problemas em tempo decompilao;
A exceo s lanada em tempo deexecuo;
-
7/23/2019 10.ControledeExcees
26/52
26
Outro tipo de exceo Em java, temos outro tipo de exceo
que obriga que o programador trate asexcees;
A esse tipo chamamos de Checked,porque o compilador checa se voc esttratando a possvel exceo;
Caso a exceo no seja tratada,ocorrer um erro em tempo de
compilao;
-
7/23/2019 10.ControledeExcees
27/52
27
Leitura de arquivos O que acontece no cdigo abaixo? Por que no compila? Como resolver o problema?
-
7/23/2019 10.ControledeExcees
28/52
28
Tratando uma exception Clique no sinal de erro e escolha a
opo Surround with try/catch
-
7/23/2019 10.ControledeExcees
29/52
29
Resultado gerado
-
7/23/2019 10.ControledeExcees
30/52
30
Outra forma de tratamento -Lanando a exceo
-
7/23/2019 10.ControledeExcees
31/52
31
Resultado gerado
-
7/23/2019 10.ControledeExcees
32/52
32
A famlia Throwable
-
7/23/2019 10.ControledeExcees
33/52
33
Como tratar mais de umaexceo?
-
7/23/2019 10.ControledeExcees
34/52
34
Combinando as tcnicas
-
7/23/2019 10.ControledeExcees
35/52
35
Melhorando o mtodo sacar()
O que poderamos fazer, ao invs dedevolver um valor boolean? Exatamente! Lanar uma exceo; Dessa forma, resolvemos o problema de
esquecimento de um if;
Para lanarmos uma exceo,precisamos da palavra reservada throw
-
7/23/2019 10.ControledeExcees
36/52
36
Alteraes do mtodo sacar()
Agora, estamos lanando a exceochamada RuntimeException
-
7/23/2019 10.ControledeExcees
37/52
37
Conhecendo RuntimException
a me de todas as exceesunchecked;A desvantagem que ela muito
genrica; Quem receber esse erro, tem
dificuldade para saber o que houve; O que fazer?
-
7/23/2019 10.ControledeExcees
38/52
38
Uma exception mais especfica
-
7/23/2019 10.ControledeExcees
39/52
39
IllegalArgumentException
uma exceo que fala um poucomais do erro ocorrido; uma exceo nativa do java; do tipo unchecked pois estende de
RuntimeException;
-
7/23/2019 10.ControledeExcees
40/52
40
Como chamar o mtodosacar()?
Agora, podemos tratar a exceolanada pelo mtodo sacar():
-
7/23/2019 10.ControledeExcees
41/52
41
Construtores em Exceptions
E se ns invocssemos uma sobrecargado construtor padro da nossa exceo?
-
7/23/2019 10.ControledeExcees
42/52
42
Acesso s mensagens O mtodo getMessage() da classe
Throwable, me de todas as exceptions,retorna a mensagem informada:
O d d
-
7/23/2019 10.ControledeExcees
43/52
43
O que deve ser protegido notry-catch?
-
7/23/2019 10.ControledeExcees
44/52
44
Melhorando o fluxo
O que mudou? Faz sentido?
-
7/23/2019 10.ControledeExcees
45/52
45
Excees personalizadas
Java possui uma boa API de excees; comum que o programador queira
controlar melhor as excees; Em Java, podemos criar e controlar
nossas prprias excees;
Uma exception uma classe javacomum, que uma extenso de algumtipo de exceo;
-
7/23/2019 10.ControledeExcees
46/52
46
Criao e uso de exceptions
Como mudar de Unchecked para Checked ?
-
7/23/2019 10.ControledeExcees
47/52
47
Uma nova clausula
Em um bloco de try-catch, soexecutados os comandos do bloco try; Em caso de exceptions, so executados
os comando do bloco catch; Mas o Java nos permite criar um
terceiro bloco, que SEMPRE serexecutado: finally
-
7/23/2019 10.ControledeExcees
48/52
48
Estrutura do bloco
Na figura abaixo, apresentada aestrutura padro para controle deexcees:
-
7/23/2019 10.ControledeExcees
49/52
49
Exerccios Criar as excees:ValorInvalidoException eSaldoInsuficienteException;
Atualizar o mtodo sacar() para lanaras excees criadas; Criar a classe TestaExcecao para usar o
mtodo sacar() e tratar suas excees; O valor a ser sacado deve ser informado
pelo usurio;
-
7/23/2019 10.ControledeExcees
50/52
50
Bibliografia
Java - Como programar, de Harvey M.Deitel Use a cabea! - Java, de Bert Bates e
Kathy Sierra (Avanado) Effective Java
Programming Language Guide, de JoshBloch
-
7/23/2019 10.ControledeExcees
51/52
51
Referncias WEB SUN: www.java.sun.com
Fruns e listas:
Javaranch: www.javaranch.com GUJ: www.guj.com.br
Apostilas:
Argonavis: www.argonavis.com.br
Caelum: www.caelum.com.br
-
7/23/2019 10.ControledeExcees
52/52
52
Java Standard Edition (JSE)
10. Controle de Excees
Esp. Mrcio PalhetaGtalk: [email protected]