Вы находитесь на странице: 1из 52

Java Standard Edition (JSE)

10. Controle de Excees

Esp. Mrcio Palheta


Gtalk: marcio.palheta@gmail.com
1

Ementa









10.
11.
12.
13.
14.
15.
16.
17.

Controle de Excees;
O pacote java.lang;
O pacote java.io;
Collection Framework e Generics;
Threads;
Sockets;
Tipos especiais: Enum;
Ferramentas jar e javadoc;
2

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;
3

Cenrio 01 Mtodo sacar()




Imaginemos a classe ContaBancaria e


seu mtodo sacar();
O que acontece quando tentamos sacar
um valor maior que o nosso limite?

Operao de saque


O sistema mostra uma mensagem de


erro(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;
5

Chamada vlida ou invlida?




O que acontece no trecho de cdigo a


seguir? Algum problema?
Sem conhecer o mtodo sacar(), voc
afirmaria que ele foi executado com
sucesso?

Como melhorar a
comunicao entre as classes?


Em sistemas reais, muito comum que


quem saiba tratar o erro aquele que
chamou o mtodo sacar();
A soluo tradicional retornar um
valor booleano, a fim de informar que
houve um erro no processamento;
Com isso, a responsabilidade de tratar o
erro que ocorreu passa para quem
chama o mtodo sacar();
7

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?
8

E os outros erros?


Mesmo que estejamos tratando o tipo


de retorno do mtodo sacar, o que
aconteceria 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?
9

Como tratar os erros?







Precisamos de uma forma de tratar


situaes especiais que possam gerar
erros;
Da, surge o conceito de EXCEO;
Exceo representa uma situao que
normalmente no, sendo algo de
estranho ou inesperado no sistema.
10

Cenrio 02 execuo de
vrios mtodos

11

Entendendo as chamadas


O mtodo main chama metodo1 que


chama 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?
12

Pilha de execuo (stack)







Toda invocao de um mtodo


empilhada em uma estrutura de
memria;
Cada mtodo tem sua prpria rea;
Quando um mtodo termina, sai da
pilha e a execuo retorna para o
mtodo que o chamou;
13

Pilha de execuo


Graficamente, podemos representar a


pilha de execuo do nosso trecho de
cdigo com a figura a seguir:

14

Mas...nem tudo perfeito







O metodo2 possui um problema: est


tentando acessar um ndice de array
indevido;
o ndice estar fora dos limites do array
quando chegar em 5;
Rode o cdigo.
Qual a sada? O que isso representa?
O que ela indica?
15

Rastro de pilha - stacktrace

16

Excees em JAVA


Quando uma exceo lanada


(throws), a JVM verifica se o mtodo
tomou algum cuidado ao tentar
executar esse trecho de cdigo;
Como metodo2 no trata o erro, a JVM
aborta a execuo do metodo2 e volta
um nvel(stackframe), retornando
execuo do metodo1;
17

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 e
chega ao mtodo main, onde percebe
que tambm no h tratativa para a
exceo lanada;
A aplicao encerrada de forma
inesperada;
18

Tratamento das excees




O erro de acesso indevido ao ndice de


um 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 exceo
ArrayIndexOutOfBoundsException.
19

Atualizao de metodo2()

20

Resultado da execuo

21

Itens a considerar



O que mudou?
A partir do momento em que a exceo
foi tratada(catched), a execuo do
programa volta ao normal;
A execuo reinicia na linha localizada
aps o bloco try-catch

22

Outra exceo de Runtime

23

Excees no-checadas


Como poderamos evitar excees como


ArrayIndexOutOfBoundsException ou
NullPointerException?
Em ambos os casos, o erro poderia ser
evitado pelo programador;
por isso que voc no obrigado a
usar o bloco try-catch;
Essas excees so chamadas de
Unchecked
24

Unchecked Exceptions


O compilador no precisa checar se


uma determinada exceo est sendo
tratada pelo programador;
No h problemas em tempo de
compilao;
A exceo s lanada em tempo de
execuo;
25

Outro tipo de exceo




Em java, temos outro tipo de exceo


que obriga que o programador trate as
excees;
A esse tipo chamamos de Checked,
porque o compilador checa se voc est
tratando a possvel exceo;
Caso a exceo no seja tratada,
ocorrer um erro em tempo de
compilao;
26

Leitura de arquivos




O que acontece no cdigo abaixo?


Por que no compila?
Como resolver o problema?

27

Tratando uma exception




Clique no sinal de erro e escolha a


opo Surround with try/catch

28

Resultado gerado

29

Outra forma de tratamento Lanando a exceo

30

Resultado gerado

31

A famlia Throwable

32

Como tratar mais de uma


exceo?

33

Combinando as tcnicas

34

Melhorando o mtodo sacar()







O que poderamos fazer, ao invs de


devolver 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
35

Alteraes do mtodo sacar()




Agora, estamos lanando a exceo


chamada RuntimeException

36

Conhecendo RuntimException


a me de todas as excees
unchecked;
A desvantagem que ela muito
genrica;
Quem receber esse erro, tem
dificuldade para saber o que houve;
O que fazer?
37

Uma exception mais especfica

38

IllegalArgumentException





uma exceo que fala um pouco


mais do erro ocorrido;
uma exceo nativa do java;
do tipo unchecked pois estende de
RuntimeException;

39

Como chamar o mtodo


sacar()?


Agora, podemos tratar a exceo


lanada pelo mtodo sacar():

40

Construtores em Exceptions


E se ns invocssemos uma sobrecarga


do construtor padro da nossa exceo?

41

Acesso s mensagens


O mtodo getMessage() da classe


Throwable, me de todas as exceptions,
retorna a mensagem informada:

42

O que deve ser protegido no


try-catch?

43

Melhorando o fluxo


O que mudou? Faz sentido?

44

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 java
comum, que uma extenso de algum
tipo de exceo;
45

Criao e uso de exceptions

Como mudar de Unchecked para Checked ?


46

Uma nova clausula




Em um bloco de try-catch, so
executados 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 ser
executado: finally
47

Estrutura do bloco


Na figura abaixo, apresentada a


estrutura padro para controle de
excees:

48

Exerccios


Criar as excees:
ValorInvalidoException e
SaldoInsuficienteException;
Atualizar o mtodo sacar() para lanar
as 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;
49

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 Josh
Bloch
50

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

51

Java Standard Edition (JSE)


10. Controle de Excees

Esp. Mrcio Palheta


Gtalk: marcio.palheta@gmail.com
52

Вам также может понравиться