Escolar Documentos
Profissional Documentos
Cultura Documentos
mtodo pode detectar uma falha mas no estar apto a resolver sua causa, devendo repassar essa funo a quem saiba ? Se introduzirmos o tratamento de falhas ao longo do fluxo normal de cdigo, podemos estar comprometendo muito a inteligibilidade
2
Excees
? Diz-se
que uma exceo lanada para sinalizar alguma falha ? O lanamento de uma exceo causa uma interrupo abrupta do trecho de cdigo que a gerou ? O controle da execuo volta para o primeiro trecho de cdigo (na pilha de chamadas) apto a tratar a exceo lanada
3
Suporte a Excees
? As
linguagens OO tipicamente do suporte ao uso de excees ? Para usarmos excees precisamos de:
uma representao para a exceo uma forma de lanar a exceo uma forma de tratar a exceo
Excees em Java
? Java
so representadas por classes so lanadas pelo comando throw so tratadas pela estrutura try-catch-finally
? De
modo geral, um mtodo que lance uma exceo deve declarar isso explicitamente ? Para uma classe representar uma exceo, ela deve pertencer a uma certa hierarquia
5
Exemplo de Uso
? Considere
a classe:
?O
mtodo div , se for chamado com b igual zero, dar um erro. Esse erro poderia ser sinalizado atravs de uma exceo
6
ento, modelar uma exceo que indica uma tentativa de diviso por zero:
public class DivByZero extends Exception { public String toString() { return "Division by zero."; } }
vamos fazer com que o mtodo div lance a exceo que criamos:
public class Calc { public int div(int a, int b) throws DivByZero { if (b == 0) throw new DivByZero(); return a/b; } }
... Calc calc = new Calc(); try { int div = calc.div(x, y); System.out.println(div); } catch (DivByZero e) { System.out.println(e); } ...
9
Checked Exceptions so excees que devem ser usadas para modelar falhas contornveis. Devem sempre ser declaradas pelos mtodos que as lanam e precisam ser tratadas (a menos que explicitamente passadas adiante) Unchecked Exceptions so excees que devem ser usadas para modelar falhas incontornveis. No precisam ser declaradas e nem tratadas
10
Hierarquia de Excees
Throwable
Error
Exception
Runtime Exception
IOException
...
11
Checked Exceptions
? Para
criarmos uma classe que modela uma checked exception, devemos estender a classe Exception ? Essa exceo ser sempre verificada pelo compilador para garantir que seja tratada quando recebida e declarada pelos mtodos que a lanam
12
Unchecked Exceptions
? Para
criarmos uma classe que modela uma unchecked exception, devemos estender a classe Error ou RuntimeException ? Esse tipo de exceo no ser verificado pelo compilador ? Tipicamente no criamos excees desse tipo, elas so usadas pela prpria linguagem para sinalizar condies de erro
13
Repassando Excees
? Se
quisssemos usar o mtodo div sem tratar a exceo, deveramos declarar que a exceo deve ser passada adiante:
public void f() throws DivByZero { Calc calc = new Calc(); int div = calc.div(a,b); System.out.println(div); }
14
public void f() throws DivByZero { Calc calc = new Calc(); try { int div = calc.div(x, y); System.out.println(div); } catch (DivByZero e) { System.out.println(e); throw e; } }
15
Estrutura try-catch-finally
Como apresentado, usamos try-catch para tratar uma exceo. A terceira parte dessa estrutura, finally , especifica um trecho de cdigo que ser sempre executado, no importando o que acontecer dentro do bloco try-catch No possvel deixar um bloco try-catchfinally sem executar sua parte finally
16
Exemplo de try-catch-finally
void readFile(String name) throws IOException { FileReader file = null; try { file = new FileReader(name); ... // l o arquivo } catch (Exception e) { System.out.println(e); } finally { if (file != null) file.close(); } }
17
18