Você está na página 1de 60

Tratamento de Excees Exceptions

Prof. Marcos Andr Pisching, M.Sc.

Agenda

Introduo Capturar exceo usando try, catch e Finally Propagar excees no capturadas Lanando excees Hierarquia de excees Correspondncia de exceo Declaraes de excees

Prof. Marcos Andr Pisching, M.Sc.

Introduo

Prof. Marcos Andr Pisching, M.Sc.

Introduo

Excees Exceptions

So situaes excepcionais e geralmente indesejveis que podem ocorrer durante a execuo de um programa. Excees podem ser tratadas incluindo-se cdigo adequado no programa no so erros fatais. Mais precisamente, uma exceo um evento que ocorre durante a execuo de um programa que o interrompe o fluxo normal das instrues. Uma exceo altera o fluxo normal da execuo de um programa.
4

Prof. Marcos Andr Pisching, M.Sc.

Introduo

Exemplos tpicos de excees:


ndice de uma lista (Array) fora do limite permitido. Problemas em operaes aritmticas overflows e diviso por zero. Argumentos invlidos na chamada de um mtodo. Falta de memria. Acesso negado a um arquivo. Acesso a rede. Outros...

Prof. Marcos Andr Pisching, M.Sc.

Introduo

Excees Por que tomar cuidado?

Basicamente porque excees no tratadas provocam a finalizao do programa. Vantagem 1: Separa o cdigo de manuseio do erro das outras linhas de cdigo. Vantagem 2: Reporta os erros entre os mtodos chamados. Vantagem 3: Agrupa os erros por tipos e diferencia entre erros possveis.
6

Vantagens:

Prof. Marcos Andr Pisching, M.Sc.

Introduo

Vantagem 1: Separao do cdigo de manuseio de erro das outras linhas de cdigo.


Programao tradicional cdigo confuso. Programao Java cdigo mais organizado, elegante e compacto, portanto mais legvel.

Prof. Marcos Andr Pisching, M.Sc.

Introduo

Vantagem 1:

Exemplos de fragmentos de cdigo:


ProgramaSemExcecao.java ProgramacaoComExcecao.java AcessoArquivo.java AcessoArquivoSemExcecao.java AcessoArquivoComExcecao.java

Prof. Marcos Andr Pisching, M.Sc.

Introduo

Vantagem 2: Reportar os erros ocorridos aos outros mtodos chamados.

Capacidade de reportar o erro ocorrido entre os mtodos executados anteriormente at o momento do erro.

Exemplo: ReportarErros.java

Prof. Marcos Andr Pisching, M.Sc.

Introduo

Vantagem 3: agrupar os erros por tipos e diferenciao entre erros


Separar erros por categorias ou grupos Exceptions devem ser instncias da classe Throwable ou subclasse de Throwable.

Prof. Marcos Andr Pisching, M.Sc.

10

Capturar exceo usando try, catch e finally

Prof. Marcos Andr Pisching, M.Sc.

11

try, catch e finally

Excees

Quando uma exceo ocorre, diz-se que uma exceo ser lanada.

O cdigo que responsvel por fazer algo com a exceo chamado de manipulador de excees, em outras palavras, ele captura a exceo lanada.

Prof. Marcos Andr Pisching, M.Sc.

12

try, catch e finally

Palavras reservadas try e catch:

try

usada para indicar um bloco de cdigo no qual possam ocorrer excees Este bloco de cdigo chamado de regio protegida, ou seja, cdigo de risco. Clusula associada a uma exceo especfica ou mais abrangente, que permite manipular a exceo a partir de um bloco de cdigo.

catch

Prof. Marcos Andr Pisching, M.Sc.

13

try, catch e finally

Palavras reservadas try e catch:

// programa sem o tratamento de exceo

Prof. Marcos Andr Pisching, M.Sc.

14

try, catch e finally

Palavras reservadas try e catch:

// programa com o tratamento de exceo

Prof. Marcos Andr Pisching, M.Sc.

15

try, catch e finally

Palavra reservada finally:

Usado para inserir cdigos de limpeza.

Os manipuladores de exceo (catch) so locais inapropriados para a limpeza depois da execuo do cdigo try, pois cada manipulador precisar de usa prpria cpia do cdigo de limpeza. Ao alocar um socket de rede ou abrir um arquivo em algum local da regio protegida, cada manipulador de exceo teria que fechar o arquivo ou liberar o socket. Estes cdigos podem ser inseridos em um bloco finally.

Exemplo:

Prof. Marcos Andr Pisching, M.Sc.

16

try, catch e finally

Palavra reservada finally:


Fechar o cdigo de execuo tanto para try quanto para catch. Sempre ser executado, se uma exceo for lanada ou no. Mesmo havendo uma instruo de return no bloco try, o bloco finally ser executado logo aps essa instruo. Ento, o local certo para fechar arquivos, liberar sockets de rede e executar qualquer outra limpeza que o cdigo necessitar.

Prof. Marcos Andr Pisching, M.Sc.

17

try, catch e finally

Palavra reservada finally:

Sintaxe geral
try {

bloco } catch (instncia de uma subclasse de Exception) { bloco try deve ser seguido de um ou mais catch } finally { e/ou exatamente um finally bloco } O bloco finally executado sempre, ocorrendo
ou no uma exceo.

A palavra try marca o incio do tratamento de excees.

Prof. Marcos Andr Pisching, M.Sc.

18

try, catch e finally

Palavra reservada finally:


A clusula finally no obrigatria. possvel escrever um cdigo try sem a clusula catch, mas nesse caso, obrigatrio a implementao do finally:
try { //instrues } finally { //faz a limpeza }

Prof. Marcos Andr Pisching, M.Sc.

19

try, catch e finally

Palavra reservada finally:

Exemplo de um cdigo invlido:


try { //instrues } System.out.println( exemplo de cdigo invlido);

Prof. Marcos Andr Pisching, M.Sc.

20

try, catch e finally

Palavra reservada finally:

Outro cdigo invlido:


try { //instrues } System.out.println( exemplo de cdigo invlido); catch (Exception ex) { //tratamento da exceo }

Prof. Marcos Andr Pisching, M.Sc.

21

Propagao de excees no capturadas

Prof. Marcos Andr Pisching, M.Sc.

22

Propagao de excees no capturadas

Quando um mtodo no fornece uma clusula catch para uma exceo especfica, ento este mtodo deve repassar a exceo (a responsabilidade) O que acontece a uma exceo transferida?

necessrio entender o conceito de pilha de chamadas.

Prof. Marcos Andr Pisching, M.Sc.

23

Propagao de excees no capturadas


1) a pilha de chamadas enquanto metodo3( ) est sendo executado
4 3 2 metodo3( ) metodo2( ) metodo1( ) metodo2( ) chama metodo3( ) metodo1( ) chama metodo2( ) main( ) chama metodo1( )

Ordem na qual os mtodos so colocados na pilha.

main( )

main inicia

2) a pilha de chamadas enquanto metodo3( ) est sendo executado. A execuo volta para metodo2( ) Ordem na qual os mtodos 1 metodo2( ) metodo2( ) vai finalizar finalizam.
2 3 metodo1( ) main( ) metodo1( ) vai finalizar main vai finalizar e o JVM terminar a sua execuo

Prof. Marcos Andr Pisching, M.Sc.

24

Propagao de excees no capturadas

Exemplo:

Prof. Marcos Andr Pisching, M.Sc.

25

Propagao de excees no capturadas

Exemplo: lanando e capturando a exceo propagada. Se a string for vazia, uma exceo dever ser lanada e capturada na chamada do mtodo inverter

Prof. Marcos Andr Pisching, M.Sc.

26

Lanando excees

Prof. Marcos Andr Pisching, M.Sc.

27

Lanando excees

Mtodos podem lanar excees para indicar condies de erro:

public void metodo1() throws IOException { . . . throw new IOException(causa...); } // ou public void metodo1() throws IOException, OutraExcecao { . . . }
Continua
Prof. Marcos Andr Pisching, M.Sc. 28

Lanando excees

Os mtodos que os utilizam devem tratar as possveis excees

public void metodo2() { try { metodo1(); } catch (IOException e) { //fazer o tratamento } }

Prof. Marcos Andr Pisching, M.Sc.

29

Lanando excees

throw e throws

Se um mtodo no captura (catch) a exception, deve-se ao menos declar-la. A declarao faz-se atravs da palavra-chave throws. Declarar significa repassar esta exception para o mtodo chamador.

Continua
Prof. Marcos Andr Pisching, M.Sc. 30

Lanando excees

throw e throws

throw gera uma exception.

Exige um objeto throwable como argumento

throw e throws

throw lana a exceo throws declara a exceo

Prof. Marcos Andr Pisching, M.Sc.

31

Lanando excees

Exemplo

Exceo tratada
Prof. Marcos Andr Pisching, M.Sc. 32

Hierarquia de excees

Prof. Marcos Andr Pisching, M.Sc.

33

Hierarquia de excees

Quando uma exceo lanada, o objeto de um subtipo Exception especfico lanado e inserido no manipulador de excees como um argumento para a clusula catch. Por isso, esse formato da clusula catch:
try { //instrues } catch (ArrayIndexOutOfBoundsException ex) { ex.printStackTrace(); }

Prof. Marcos Andr Pisching, M.Sc.

Neste exemplo, ex a instncia de uma classe chamada de ArrayIndexOutOfBoundsException. Assim, como qualquer outro objeto, podemos chamar seus mtodos.
34

Hierarquia de excees

Todas as classe de excees so subtipos da classe Exception.

Esta classe derivada de Throwable Esta deriva de Object. Error: as classes que derivam desta representam situaes incomuns que so causadas por erros no programa. Exemplo: falta de memria Embora considerados como condies excepcionais, Error tecnicamente no so excees porque no derivam da classe Exception. Faz pouco sentido trat-los, pois a JVM j deve ter feito de tudo para contornar a situao.

De Throwable derivam: Exception e Error.

Prof. Marcos Andr Pisching, M.Sc.

35

Hierarquia de excees

Hierarquia de classes

As excees RuntimeException, Error e todos os seus subtipos so excees no verificadas, isto , no precisam ser capturadas ou manipuladas.

Prof. Marcos Andr Pisching, M.Sc.

36

Hierarquia de excees

Tipos que podem ser lanados atravs de throws e que podem ser capturados:

Exception Error RuntimeException Throwable

Os subtipos de Exception so comumente capturados e tratados, j os demais raramente se faz.


Prof. Marcos Andr Pisching, M.Sc. 37

Hierarquia de excees

Manipulando uma hierarquia de classes

Mais de um tipo de exceo pode ser capturada em uma nica clusula catch vale a herana Exemplo:

try { //instrues } catch (IndexOutOfBoundsException e) { e.printStackTrace(); }

Se algum cdigo do bloco try lanar ArrayIndexOutOfBoudsException ou StringIndexOutOfBoundsException, a exceo ser capturada e manipulada. Continua
38

Prof. Marcos Andr Pisching, M.Sc.

Hierarquia de excees

Manipulando uma hierarquia de classes

Este tipo de declarao pode acontecer, mas deve ser usado moderadamente. Especificando o tipo da superclasse, pode-se estar descartando informaes valiosas sobre a exceo. Por exemplo:
Tratar um Exception muito abrangente. Fica difcil indentificar a real exceo.

try { //... } catch (Exception e) { //... }

Prof. Marcos Andr Pisching, M.Sc.

39

Hierarquia de excees

Correspondncia de Excees

Superclasse com vrios subtipos A JVM tenta encontrar uma clusula catch para o tipo da exceo que foi lanada. Procura de cima para baixo (do primeiro catch ao ltimo) Caso no seja encontrado, um manipulador para um supertipo da exceo ser procurado. Se ainda assim no encontrar uma clusula catch apropriada, ento a exceo ser propagada para baixo na pilha de chamadas.

Este processo chamado de Correspondncia de excees.

Prof. Marcos Andr Pisching, M.Sc.

40

Hierarquia de excees

Exemplo:

Continua
Prof. Marcos Andr Pisching, M.Sc. 41

Hierarquia de excees

Exemplo:

Neste caso a exceo lanada foi FileNotFoundException. Mas poderia ser tambm um EOFException ou outra. Sendo estas subclasses de IOException, teremos a garantia que a exceo ser tratada caso no for FileNotFoundException. Como qualquer outra exceo que estende IOException pode ser lanada isso nos obriga a declara-la. Veja exemplo do Prximo slide. Continua
Prof. Marcos Andr Pisching, M.Sc. 42

Hierarquia de excees

Exemplo:

Outras excees de IOException, que no FileNotFoudException podem ocorrer. Isso nos obriga trata-las

Continua
Prof. Marcos Andr Pisching, M.Sc. 43

Hierarquia de excees

Exemplo: necessrio cuidar a ordem da declarao

Como FileNotFoundException um subtipo de IOException, esta no pode vir depois.

Prof. Marcos Andr Pisching, M.Sc.

44

Declarao de Excees

Prof. Marcos Andr Pisching, M.Sc.

45

Declarao de exceo

Como saber se um mtodo lana uma exceo?


Identificar a interface pblica do mtodo void metodo(int x) throws Excecao1, Excecao2;

Prof. Marcos Andr Pisching, M.Sc.

46

Declarao de exceo

Todo mtodo deve tratar todas as excees verificadas fornecendo uma clusula catch, ou ento listar cada exceo verificada que no tiver recebido tratamento como uma exceo lanada.

Regra conhecida como tratar ou declarar.

Continua

Prof. Marcos Andr Pisching, M.Sc.

47

Declarao de exceo

Exemplo:

Como tem um throw, o mtodo dever declarar um throws avisando que uma exceo pode ser Lanada. Isto s no necessrio para excees que estendem RuntimeException.
Prof. Marcos Andr Pisching, M.Sc.

Continua

48

Declarao de exceo

Exemplo: corrigindo o problema...

Agora, necessrio tratar a exceo ou reporta-la.

Continua

Prof. Marcos Andr Pisching, M.Sc.

49

Declarao de exceo

Exemplo: corrigindo o problema... Reportando...


Reportando at o main. Faz pouco sentido!!!

Continua

Prof. Marcos Andr Pisching, M.Sc.

50

Declarao de exceo

Exemplo: corrigindo o problema... Tratando a exceo...

Prof. Marcos Andr Pisching, M.Sc.

51

Declarao de exceo

Excees verificadas e no verificadas

Verificada:

Ter que ser capturada em algum local do cdigo. Se um mtodo que lance uma exceo verificada for chamado, mas no capturar a exceo em algum local, o cdigo no ser compilado. Por isso so chamadas de verificadas o compilador verifica para se certificar se elas foram declaradas ou manipuladas.

Prof. Marcos Andr Pisching, M.Sc.

52

Declarao de exceo

Excees verificadas e no verificadas

No-verificada:

Excees de tempo de execuo so consideradas como no-verificadas. Todas as excees que no so derivadas de java.lang.RuntimeException, so verificadas.

Prof. Marcos Andr Pisching, M.Sc.

53

Criando uma classe de Exceo

Prof. Marcos Andr Pisching, M.Sc.

54

Criando classes de Exceo

Para criar uma classe de Exceo prpria, basta criar uma subclasse de Exception.

Ou tambm criar uma subclasse a partir de subclasses de Exception.

Prof. Marcos Andr Pisching, M.Sc.

55

Criando classes de Exceo

Exemplo

Ao chamar um mtodo com uma exceo declarada, a mesma dever tratada ou reportada.

Se a exceo foi lanada, dever ser tambm declarada.


Prof. Marcos Andr Pisching, M.Sc. 56

Criando classes de Exceo

Exemplo: otimizando a classe de exceo

Sobrecarregando os construtores de MinhaExcecao, possvel simplesmente definir uma mensagem, uma causa ou ambas.

Prof. Marcos Andr Pisching, M.Sc.

57

Criando classes de Exceo

Exemplo: usando a classe de exceo otimizada

Prof. Marcos Andr Pisching, M.Sc.

58

Sumrio

Introduo e conceitos Capturando exceo usando try, catch e Finally Propagando excees no capturadas Lanando excees Hierarquia de excees Correspondncia de exceo Declaraes de excees
Prof. Marcos Andr Pisching, M.Sc. 59

Excees
Marcos Andr Pisching marcos.pisching@ifsc.edu.br