programaçãodecomputadoresiirosseti/progii/2013-2/aula_06... ·...
TRANSCRIPT
![Page 1: ProgramaçãodeComputadoresIIrosseti/PROGII/2013-2/aula_06... · Conteúdo:"Tratamento"de"exceções" Material-elaborado-pelos-profs.-Anselmo-Montenegro-e-Marcos-Lage-comcontribuições-do-prof.-Leandro-A.-F.-Fernandes](https://reader034.vdocuments.mx/reader034/viewer/2022042917/5f5c0ecd56704a105547f34c/html5/thumbnails/1.jpg)
Conteúdo: Tratamento de exceções
Material elaborado pelos profs. Anselmo Montenegro e Marcos Lage com contribuições do prof. Leandro A. F. Fernandes
Programação de Computadores II TCC-‐00.174
Profs.: Leandro A. F. Fernandes(A1) & Marcos Lage(B1) & Isabel
RosseJ(C1)
(Turma A1) www.ic.uff.br/~laffernandes (Turma B1) www.ic.uff.br/~mlage (Turma C1) www.ic.uff.br/~rosseJ
![Page 2: ProgramaçãodeComputadoresIIrosseti/PROGII/2013-2/aula_06... · Conteúdo:"Tratamento"de"exceções" Material-elaborado-pelos-profs.-Anselmo-Montenegro-e-Marcos-Lage-comcontribuições-do-prof.-Leandro-A.-F.-Fernandes](https://reader034.vdocuments.mx/reader034/viewer/2022042917/5f5c0ecd56704a105547f34c/html5/thumbnails/2.jpg)
Exceções
O que são Exceções ? 1) São eventos excepcionais 2) Ocorrem em tempo de execução 3) Causam problemas ao fluxo normal do programa
Ex: Divisão por zero Acessar elementos de um Array fora do seu alcance Entrada de dados inválida ...
10/17/13 Programação de Computadores II 2
Introdução
![Page 3: ProgramaçãodeComputadoresIIrosseti/PROGII/2013-2/aula_06... · Conteúdo:"Tratamento"de"exceções" Material-elaborado-pelos-profs.-Anselmo-Montenegro-e-Marcos-Lage-comcontribuições-do-prof.-Leandro-A.-F.-Fernandes](https://reader034.vdocuments.mx/reader034/viewer/2022042917/5f5c0ecd56704a105547f34c/html5/thumbnails/3.jpg)
Exceções
Exemplo: class DivZero { public static void main (String[] args) { System.out.println( 3/0 ); } } Saída: ExcepNon in thread "main" java.lang.ArithmeNcExcepNon: / by zero at DivZero.main(DivZero.java:3)
10/17/13 Programação de Computadores II 3
Introdução
![Page 4: ProgramaçãodeComputadoresIIrosseti/PROGII/2013-2/aula_06... · Conteúdo:"Tratamento"de"exceções" Material-elaborado-pelos-profs.-Anselmo-Montenegro-e-Marcos-Lage-comcontribuições-do-prof.-Leandro-A.-F.-Fernandes](https://reader034.vdocuments.mx/reader034/viewer/2022042917/5f5c0ecd56704a105547f34c/html5/thumbnails/4.jpg)
Exceções
Exceções Padrão: Fornecidas pelo Java runNme. Imprime uma descrição da exceção. Imprime a hierarquia de chamada do método onde ocorrem a exceção. Encerra o programa.
10/17/13 Programação de Computadores II 4
Introdução
![Page 5: ProgramaçãodeComputadoresIIrosseti/PROGII/2013-2/aula_06... · Conteúdo:"Tratamento"de"exceções" Material-elaborado-pelos-profs.-Anselmo-Montenegro-e-Marcos-Lage-comcontribuições-do-prof.-Leandro-A.-F.-Fernandes](https://reader034.vdocuments.mx/reader034/viewer/2022042917/5f5c0ecd56704a105547f34c/html5/thumbnails/5.jpg)
Exceções
O que acontece quando ocorre uma exceção ? Quando uma exceção acontece dentro de um método, o método cria um objeto do Npo ExcepNon e o passa para o sistema.
Uma exceção é “lançada”
10/17/13 Programação de Computadores II 5
Introdução
![Page 6: ProgramaçãodeComputadoresIIrosseti/PROGII/2013-2/aula_06... · Conteúdo:"Tratamento"de"exceções" Material-elaborado-pelos-profs.-Anselmo-Montenegro-e-Marcos-Lage-comcontribuições-do-prof.-Leandro-A.-F.-Fernandes](https://reader034.vdocuments.mx/reader034/viewer/2022042917/5f5c0ecd56704a105547f34c/html5/thumbnails/6.jpg)
Exceções
O que acontece quando ocorre uma exceção ?
10/17/13 Programação de Computadores II 6
Introdução
Método onde a exceção aconteceu
Método sem tratamento para a
exceção
Método com tratamento para a
exceção main
chamada chamada chamada
![Page 7: ProgramaçãodeComputadoresIIrosseti/PROGII/2013-2/aula_06... · Conteúdo:"Tratamento"de"exceções" Material-elaborado-pelos-profs.-Anselmo-Montenegro-e-Marcos-Lage-comcontribuições-do-prof.-Leandro-A.-F.-Fernandes](https://reader034.vdocuments.mx/reader034/viewer/2022042917/5f5c0ecd56704a105547f34c/html5/thumbnails/7.jpg)
Exceções
O que acontece quando ocorre uma exceção ?
10/17/13 Programação de Computadores II 7
Introdução
Método onde a exceção aconteceu
Método sem tratamento para a
exceção
Método com tratamento para a
exceção main
chamada chamada chamada
busca busca
![Page 8: ProgramaçãodeComputadoresIIrosseti/PROGII/2013-2/aula_06... · Conteúdo:"Tratamento"de"exceções" Material-elaborado-pelos-profs.-Anselmo-Montenegro-e-Marcos-Lage-comcontribuições-do-prof.-Leandro-A.-F.-Fernandes](https://reader034.vdocuments.mx/reader034/viewer/2022042917/5f5c0ecd56704a105547f34c/html5/thumbnails/8.jpg)
Exceções
O que acontece quando ocorre uma exceção ? Quando o tratamento para a exceção é encontrado, o objeto ExcepNon é passado para o manipulador de exceções. O tratamento de uma exceção é considerado apropriado se o Npo da exceção lançada é igual ao do tratamento. Se nenhum tratamento é encontrado, o manipulador padrão de exceção é chamado e o programa termina.
10/17/13 Programação de Computadores II 8
Introdução
![Page 9: ProgramaçãodeComputadoresIIrosseti/PROGII/2013-2/aula_06... · Conteúdo:"Tratamento"de"exceções" Material-elaborado-pelos-profs.-Anselmo-Montenegro-e-Marcos-Lage-comcontribuições-do-prof.-Leandro-A.-F.-Fernandes](https://reader034.vdocuments.mx/reader034/viewer/2022042917/5f5c0ecd56704a105547f34c/html5/thumbnails/9.jpg)
Exceções
Bene<cios de usar tratamento de exceções ? Exemplo: readFile(nomeDoArquivo) { abrir o arquivo; determinar seu tamanho; alocar a memória necessária; carregar o arquivo na memória; fechar o arquivo; }
10/17/13 Programação de Computadores II 9
Introdução
![Page 10: ProgramaçãodeComputadoresIIrosseti/PROGII/2013-2/aula_06... · Conteúdo:"Tratamento"de"exceções" Material-elaborado-pelos-profs.-Anselmo-Montenegro-e-Marcos-Lage-comcontribuições-do-prof.-Leandro-A.-F.-Fernandes](https://reader034.vdocuments.mx/reader034/viewer/2022042917/5f5c0ecd56704a105547f34c/html5/thumbnails/10.jpg)
Exceções
errorCodeType readFile(nomeDoArquivo) { inicialize errorCode = 0; abra o arquivo; if (arquivoAberto) { determine o tamanho; if (tamanhoDoArquivoOk) { reserva a memoria; if (memoriaSuficiente) { carrega o arquivo; if (falhaCarregamento) errorCode = -‐1; else errorCode = -‐2; } else erroCode = -‐3
… }
10/17/13 Programação de Computadores II 10
Introdução
![Page 11: ProgramaçãodeComputadoresIIrosseti/PROGII/2013-2/aula_06... · Conteúdo:"Tratamento"de"exceções" Material-elaborado-pelos-profs.-Anselmo-Montenegro-e-Marcos-Lage-comcontribuições-do-prof.-Leandro-A.-F.-Fernandes](https://reader034.vdocuments.mx/reader034/viewer/2022042917/5f5c0ecd56704a105547f34c/html5/thumbnails/11.jpg)
Exceções
void readFile(nomeDoArquivo) { try { abra o arquivo; determine o tamanho; reserva a memoria; carrega o arquivo; fecha o arquivo; } catch (arquivoAberto) { tratamento do erro; } catch (tamanhoInvalido) { tratamento do erro; } catch (memoriaInsuficiente) { tratamento do erro; } catch (falhaNaLeitura) { tratamento do erro; } catch (falhaNoFechamento) { tratamento do erro; } }
10/17/13 Programação de Computadores II 11
Introdução
![Page 12: ProgramaçãodeComputadoresIIrosseti/PROGII/2013-2/aula_06... · Conteúdo:"Tratamento"de"exceções" Material-elaborado-pelos-profs.-Anselmo-Montenegro-e-Marcos-Lage-comcontribuições-do-prof.-Leandro-A.-F.-Fernandes](https://reader034.vdocuments.mx/reader034/viewer/2022042917/5f5c0ecd56704a105547f34c/html5/thumbnails/12.jpg)
Exceções
10/17/13 Programação de Computadores II 12
Controle de Erro
DireNva Try -‐ Catch: try { Fluxo normal do sistema } catch (Exceção1) { Diretiva do tratamento do erro 1 } catch (Exceção2) { Diretiva do tratamento do erro 2 }
![Page 13: ProgramaçãodeComputadoresIIrosseti/PROGII/2013-2/aula_06... · Conteúdo:"Tratamento"de"exceções" Material-elaborado-pelos-profs.-Anselmo-Montenegro-e-Marcos-Lage-comcontribuições-do-prof.-Leandro-A.-F.-Fernandes](https://reader034.vdocuments.mx/reader034/viewer/2022042917/5f5c0ecd56704a105547f34c/html5/thumbnails/13.jpg)
Exceções
10/17/13 Programação de Computadores II 13
Controle de Erro
RepeJção condicional: try e catch Exemplo: 1 exceção public class ExemploTryCatch1 { public static void main(String args[]) { try { int j = 0; int n = Integer.parseInt(args[0]); while (j > n) { System.out.println(j); j-‐-‐; } } catch (ArrayIndexOutOfBoundsException e) { System.err.println(“Não foi fornecido um argumento”); } } }
![Page 14: ProgramaçãodeComputadoresIIrosseti/PROGII/2013-2/aula_06... · Conteúdo:"Tratamento"de"exceções" Material-elaborado-pelos-profs.-Anselmo-Montenegro-e-Marcos-Lage-comcontribuições-do-prof.-Leandro-A.-F.-Fernandes](https://reader034.vdocuments.mx/reader034/viewer/2022042917/5f5c0ecd56704a105547f34c/html5/thumbnails/14.jpg)
Exceções
10/17/13 Programação de Computadores II 14
Controle de Erro
RepeJção condicional: try e catch Exemplo: 2 exceções public class ExemploTryCatch2 { public static void main(String args[]) { try { int j = 0; int n = Integer.parseInt(args[0]); while (j > n) { System.out.println(j); j-‐-‐; } } catch (ArrayIndexOutOfBoundsException e) { System.err.println(“Não foi fornecido um argumento”); } catch (NumberFormatException e) { System.err.println(“Não foi fornecido um inteiro válido”); } } }
![Page 15: ProgramaçãodeComputadoresIIrosseti/PROGII/2013-2/aula_06... · Conteúdo:"Tratamento"de"exceções" Material-elaborado-pelos-profs.-Anselmo-Montenegro-e-Marcos-Lage-comcontribuições-do-prof.-Leandro-A.-F.-Fernandes](https://reader034.vdocuments.mx/reader034/viewer/2022042917/5f5c0ecd56704a105547f34c/html5/thumbnails/15.jpg)
Exceções
10/17/13 Programação de Computadores II 15
Controle de Erro
DireNva Try -‐ Catch -‐ Finally: try { Fluxo normal do sistema } catch (Exceção1) { Diretiva do tratamento do erro 1 } finally { Fluxo que será sempre executado, independente da ocorrência da exceção ou não. }
![Page 16: ProgramaçãodeComputadoresIIrosseti/PROGII/2013-2/aula_06... · Conteúdo:"Tratamento"de"exceções" Material-elaborado-pelos-profs.-Anselmo-Montenegro-e-Marcos-Lage-comcontribuições-do-prof.-Leandro-A.-F.-Fernandes](https://reader034.vdocuments.mx/reader034/viewer/2022042917/5f5c0ecd56704a105547f34c/html5/thumbnails/16.jpg)
Exceções
10/17/13 Programação de Computadores II 16
Lançando Exceções
class ThrowDemo { public static void main(String args[]){ String input = “invalid input”; try { if (input.equals(“invalid input”)) { throw new RuntimeException("throw demo"); } else { System.out.println(input); } System.out.println("After throwing"); } catch (RuntimeException e) { System.err.println("Exception caught:" + e); } } }
![Page 17: ProgramaçãodeComputadoresIIrosseti/PROGII/2013-2/aula_06... · Conteúdo:"Tratamento"de"exceções" Material-elaborado-pelos-profs.-Anselmo-Montenegro-e-Marcos-Lage-comcontribuições-do-prof.-Leandro-A.-F.-Fernandes](https://reader034.vdocuments.mx/reader034/viewer/2022042917/5f5c0ecd56704a105547f34c/html5/thumbnails/17.jpg)
Exceções
10/17/13 Programação de Computadores II 17
Lançando Exceções
class ThrowingClass { static void meth() throws ClassNotFoundException { throw new ClassNotFoundException ("demo"); } } class ThrowsDemo { public static void main(String args[]) { try { ThrowingClass.meth(); } catch (ClassNotFoundException e) { System.err.println(e); } }
![Page 18: ProgramaçãodeComputadoresIIrosseti/PROGII/2013-2/aula_06... · Conteúdo:"Tratamento"de"exceções" Material-elaborado-pelos-profs.-Anselmo-Montenegro-e-Marcos-Lage-comcontribuições-do-prof.-Leandro-A.-F.-Fernandes](https://reader034.vdocuments.mx/reader034/viewer/2022042917/5f5c0ecd56704a105547f34c/html5/thumbnails/18.jpg)
Exceções
10/17/13 Programação de Computadores II 18
Criando Exceções
public class JogoDeCartas { ... public Carta pegaCarta() throws BaralhoVazioException { if (numeroDeCartas() == 0) { throw new BaralhoVazioException("Baralho esta vazio"); } return (Carta)baralho.remove(numeroDeCartas() -‐ 1); } ... }
public class BaralhoVazioException extends Exception { public BaralhoVazioException(String motivo) { super(motivo); } }
![Page 19: ProgramaçãodeComputadoresIIrosseti/PROGII/2013-2/aula_06... · Conteúdo:"Tratamento"de"exceções" Material-elaborado-pelos-profs.-Anselmo-Montenegro-e-Marcos-Lage-comcontribuições-do-prof.-Leandro-A.-F.-Fernandes](https://reader034.vdocuments.mx/reader034/viewer/2022042917/5f5c0ecd56704a105547f34c/html5/thumbnails/19.jpg)
Exceções
10/17/13 Programação de Computadores II 19
Classes