ProgramaçãodeComputadoresIIrosseti/PROGII/2013-2/aula_06... ·...

19
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 TCC00.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

Transcript of ProgramaçãodeComputadoresIIrosseti/PROGII/2013-2/aula_06... ·...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Exceções  

10/17/13   Programação  de  Computadores  II   19  

Classes