programaçãodecomputadoresiirosseti/progii/2013-2/aula_06... ·...
TRANSCRIPT
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
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
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
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
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
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
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
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
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
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
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
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 }
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”); } } }
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”); } } }
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. }
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); } } }
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); } }
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); } }
Exceções
10/17/13 Programação de Computadores II 19
Classes