10.ControledeExceções

download 10.ControledeExceções

of 52

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]