Você está na página 1de 21

Tratamento de Excees

Prof. M.Sc. Gabriel Gadelha POO

Exemplo 1

Considere a classe:

O m todo di!" se for chamado com b i#$al % &ero" dar' $m erro. Esse erro poderia ser sinali&ado por meio de $ma exce(o

)efinies *'sicas

+ma exce(o lanada para sinali&ar al#$ma falha O lanamento de $ma exce(o ca$sa $ma interr$p(o abr$pta do trecho de c,di#o -$e a #ero$ O controle da exec$(o !olta para o primeiro trecho de c,di#o .na pilha de chamadas/ apto a tratar a exce(o lanada

Moti!a(o

+m m todo pode detectar $ma falha mas n(o estar apto a resol!er s$a ca$sa" de!endo repassar essa f$n(o a -$em saiba. Se introd$&irmos o tratamento de falhas ao lon#o do fl$xo normal de c,di#o" podemos estar comprometendo m$ito a inteli#ibilidade

0poio ao Tratamento de Excees


1 0s lin#$a#ens OO tipicamente d(o apoio ao tratamento de excees 1 Para $sarmos excees precisamos de: $ma representa(o para a exce(o $ma forma de lanar a exce(o $ma forma de tratar a exce(o

Excees em 2a!a

S(o representadas por classes S(o lanadas pelo comando thro3 S(o tratadas pela estr$t$ra tr45catch5finall4 +m m todo -$e lance $ma exce(o de!e declarar isso explicitamente Para $ma classe representar $ma exce(o" ela de!e pertencer a $ma certa hierar-$ia

6mplementando $ma Exce(o

7anando $ma Exce(o

Tratando $ma Exce(o

Tipos de Exce(o em 2a!a

Checked Exceptions: s(o excees -$e de!em ser $sadas para modelar falhas contorn'!eis. )e!em sempre ser declaradas pelos m todos -$e as lanam e precisam ser tratadas .a menos -$e explicitamente passadas adiante/ Unchecked Exceptions: s(o excees -$e de!em ser $sadas para modelar falhas incontorn'!eis. 8(o precisam ser declaradas e nem tratadas

9ierar-$ia de Excees

Chec:ed Exception

Para criarmos $ma classe -$e modela $ma chec:ed exception" de!emos estender a classe Exception. Essa exce(o ser' sempre !erificada pelo compilador para #arantir -$e se;a tratada -$ando recebida e declarada pelos m todos -$e a lanam.

+nchec:ed Exception

Para criarmos $ma classe -$e modela $ma $nchec:ed exception" de!emos estender a classe Error o$ RuntimeException. Esse tipo de exce(o n(o ser' !erificado pelo compilador Tipicamente n(o criamos excees desse tipo" elas s(o $sadas pela pr,pria lin#$a#em para sinali&ar condies de erro

<epassando Excees

Se -$is ssemos $sar o m todo di! sem tratar a exce(o" de!er=amos declarar -$e a exce(o de!e ser passada adiante:

Tratanto e <epassando

Mesmo tratada" a exce(o pode ser repassada:

Estr$t$ra tr45catch5finall4

Como apresentado" $samos tr45catch para tratar $ma exce(o. 0 terceira parte dessa estr$t$ra" finall4" especifica $m trecho de c,di#o -$e ser' sempre exec$tado" n(o importando o -$e acontecer dentro do bloco tr45catch No possvel deixar um bloco try catch !inally sem executar sua parte !inally

Exemplo

Tratando M>ltiplas Excees

Exerc=cio

Tentem exec$tar a classe abaixo:

Exerc=cio

<esol$(o