SlideShare uma empresa Scribd logo
1 de 38
Baixar para ler offline
Prof. Adriano Teixeira de Souza
         Sistemas de tratamento de exceções
         Exceções em Java
   Componentes podem ter problemas
    durante a execução e reagir como:
    ◦   terminar o programa;
    ◦   retornar um valor de erro indicando falha;
    ◦   retornar e ignorar o problema;
    ◦   chamar uma função para tratar o erro, etc...
   Problemas: erros e exceções
    ◦ representam situações anormais (exceções) ou inválidas
      (erros) durante o processo de execução
   Componentes robustos: tentam sanar os
    problemas


                                 Prof. Adriano Teixeira de Souza
   Os problemas comuns de execução:
    ◦ falha na aquisição de um recurso (new, open..)
    ◦ tentativa de fazer algo impossível (divisão por zero,
      índice inválido..)
    ◦ outras condições inválidas (lista vazia, overflow..)




                                                     classe

       objeto.metodo()          dados
                                                     método()



                               Prof. Adriano Teixeira de Souza
   Premissas:
    ◦ Possíveis problemas de execução de um método podem
      ser antecipados pelo programador
    ◦ Situações de erro podem ser revertidas

   Solução ideal
    ◦ tratamento de problemas separado do código normal
    ◦ Mecanismo: sistemas de tratamento de exceções (STE)




                             Prof. Adriano Teixeira de Souza
   Mecanismos oferecidos pela LP
   Um STE deve ser capaz de :
    ◦ detectar a ocorrência de uma situação anormal de
      processamento

    ◦ identificar o tipo de ocorrência e enviar um sinal ao
      programa (disparar uma exceção)

    ◦ capturar a exceção em algum ponto do programa

    ◦ tratar uma exceção em algum ponto do programa
      (ativar tratador)

disparar         detectar           capturar                   tratar

                             Prof. Adriano Teixeira de Souza
   Exceções podem ser disparadas de duas
    maneiras:
    ◦ Implicitamente, pelo ambiente operacional
       o ambiente de execução não consegue executar um
        comando em um programa


    ◦ Explicitamente, pelo programa
       uma função do programa não consegue prosseguir a
        execução




    disparar       detectar           capturar                   tratar

                               Prof. Adriano Teixeira de Souza
public class Zero {
  public static void main ( String[] args){
      int numerador = 10;
      int denominador = 0;
      System.out.println(numerador/denominador);
  } // main
                                                                  mensagem
} // Zero                                                          do JRE

execução: java.lang.ArithmeticException: / by zero
      at Zero.main(Zero.java:xx)

xx: número da linha do arquivo fonte onde ocorreu o erro

                                Prof. Adriano Teixeira de Souza
   Indicação da região do programa que deve
    ser monitorada pelo sistema de tratamento
    de exceções
   Sintaxe: try {<bloco de comandos>}
   Exemplo:                      comandos que podem
                                                        disparar exceções
    try {
            num= Integer.parseInt(stdin.readLine());
            valido = true;
     }

disparar             detectar          capturar                   tratar

                                Prof. Adriano Teixeira de Souza
   Um comando catch tem as seguintes funções:
   capturar um (determinado) tipo de exceção
   implementar um tratador para aquele tipo de
    exceção
   Sintaxe: catch(<tipo><arg>){<comandos>}
   Exemplo:


    catch (NumberFormatException exc) {
        System.out.println(“Entrada invalida. Digite outra”);
    }

disparar           detectar          capturar                   tratar

                              Prof. Adriano Teixeira de Souza
try {
    num= Integer.parseInt(stdin.readLine());
    valido = true;
}
catch (NumberFormatException exc) {
  System.out.println(“Entrada invalida. Digite outra”);
}
catch (IOException exc) {
  System.out.println(“Problema de entrada. Terminando!”);
  System.exit(0);
}


                         Prof. Adriano Teixeira de Souza
   Exceções são objetos, instâncias de alguma
    sub-classe de java.lang.Throwable
    ◦ podem conter dados
    ◦ podem definir métodos
   Um dos dados é um String inicializado em
    tempo de criação do objeto, consultado por
    ◦   Throwable.getMessage()
   Throwable tem duas sub-classes: Error e
    Exception.
    ◦ Exceptions: podem ser capturadas e tratadas
    ◦ Errors: correspondem a problemas mais graves, que não
      podem ser recuperados


                              Prof. Adriano Teixeira de Souza
   Instâncias da classe Error e suas extensões
    ◦ correspondem a problemas mais graves ocorridos no
      ambiente de execução
    ◦ conhecidas como exceções não-verificadas
    Instâncias da classe Exception e suas
    extensões
    ◦ podem ser tratadas localmente
    ◦ conhecidas como exceções verificadas: o compilador
      “verifica” antes da execução do programa
    ◦ comandos que disparam exceções verificadas devem ser
      colocados em um bloco try




                            Prof. Adriano Teixeira de Souza
Exception: hierarquia de exceções

                       Exception
                       java.lang


   IOException                                   Runtime
     java.io                                    Exception
contexto:
java.lang.Object |                           NumberFormat
     java.lang.Throwable |
java.lang.Exception                            Exception

                             Prof. Adriano Teixeira de Souza
   Tratar exceções cria um fluxo de controle
    separado do fluxo normal de execução
   Abordagens:
    ◦ tratar a exceção onde ela ocorre ( local)
    ◦ tratar a exceção em outro ponto do programa

                     tratador de
                       exceção

    unidade de                                unidade de
     chamada                                   execução


                             Prof. Adriano Teixeira de Souza
comando anterior;
try {
        num= Integer.parseInt(stdin.readLine());
        valido = true;
}
catch (NumberFormatException exc) {
    System.out.println(“Entrada invalida. Digite outra”);
}
catch (IOException exc) {
    System.out.println(“Problema de entrada. Terminando!”);
    System.exit(0);
}
comando posterior;

                                    Prof. Adriano Teixeira de Souza
comando anterior;
     try {
             num= Integer.parseInt(stdin.readLine());
             valido = true;
     }
     catch (NumberFormatException exc) {
             System.out.println(“Entrada invalida. Digite outra”);
     }
OU
     catch (IOException exc) {
         System.out.println(“Problema de entrada. Terminando!”);
         System.exit(0);
     }
     comando posterior;

                                         Prof. Adriano Teixeira de Souza
chamada                     execução


                                                  método()
  objeto.metodo()            dados




• Modelos de implementação


Término: após a execução do tratador de exceção,
         a unidade onde ocorreu o erro é terminada


Continuação: após a execução do tratador de exceção,
         a unidade continua a sua execução
                          Prof. Adriano Teixeira de Souza
A: chamada               B: execução


                                                       método()
        objeto.metodo()          dados




 tratador no requisitante                   tratador local
Hipótese 1:                      Hipótese 2:
- B acusa erro e termina a       - B faz tratamento local
execução                         de erro
- A captura o erro e trata a     - Caso não consiga recuperar
exceção                          o erro, recai na Hipótese 1

                               Prof. Adriano Teixeira de Souza
   Para buscar o tratador de exceção:
    ◦ percorre a ‘cadeia’ de ativações, a partir do ambiente
      local (pilha de execução)

    ◦ durante o caminho, são destruídos os objetos criados
      nos ambientes percorridos (retira da pilha de execução)

    ◦ se não for encontrado um tratador a exceção a exceção
      chega ao método main, que termina o programa

                                                                  m2()
                                                                  m1()
               Ver: método printStackTrace()                      main()

                                Prof. Adriano Teixeira de Souza
   Sinal emitido pelo programa com a
    indicação da ocorrência de uma exceção
    ◦ if (…problema…)
             throw new IOException( );

   Instanciação a partir de uma classe
    ◦ throw new <classe()>
    ◦ Exemplo: if (t==null) throw new NullPointerException();

   Objeto já instanciado
    ◦ throw <objeto>
    ◦ Exception problema = new Exception (“Alerta!”);
    ◦ Exemplo:.... throw problema; ...

                             Prof. Adriano Teixeira de Souza
   Considerando que:
    ◦ a unidade de execução pode detectar problemas mas
      geralmente não sabe como tratá-lo
    ◦ a unidade requisitante não pode detectar problemas
      mas geralmente sabe como tratá-los
    ◦ é conveniente saber quais são as exceções que um
      método pode disparar para providenciar um tratador

   Cláusula throws : usada no cabeçalho de
    um método para indicar que ele propaga a
    exceção

   Exemplo:
    ◦ public Integer(String s) throws NumberFormatException


                             Prof. Adriano Teixeira de Souza
   Para forçar a ocorrência de uma exceção,
    utiliza-se a palavra reservada throw (no
    singular)
public void metodo1( ) {
    try {
                                                          throws (plural)
     metodo2( );                                         propaga exceção
    } catch (IOException e) { System.err.println(e); }
}

        public void metodo2( ) throws IOException {
            if (…problema…)
               throw new IOException( );
        }
public String readLine()
import java.io.*;
                                          throws IOException
public class simplesIO {
    static BufferedReader stdin=new BufferedReader
            (new InputStreamReader(System.in));
    public static void saida(String ms){
        System.out.print (ms);
    }
    public static String entrada() throws IOException{
        return stdin.readLine();
    }
    public static void linha(){
                                               // exemplo de chamada:
         System.out.println();
    }                                          try{linha=entrada();}
}//simplesIO                                   catch(IOException e){}

                                      Prof. Adriano Teixeira de Souza
import java.io.*;
public class simplesIO {
    static BufferedReader stdin=new BufferedReader
            (new InputStreamReader(System.in));
    public static void saida(String ms){
        System.out.print (ms);}
    public static String entrada(){
        try { String lin= stdin.readLine();
               return lin;
        } catch(IOException){// tratar aqui}
    }
    public static void linha(){
        System.out.println();                     // exemplo de chamada:
    }
                                                  linha=entrada();
}//simplesIO
                                       Prof. Adriano Teixeira de Souza
Exceções definidas pelo usuário

                Exception
                java.lang


  IOException                           RunTime
    java.io                             Exception


          Minha                      NumberFormat
         Exception                     Exception

                     Prof. Adriano Teixeira de Souza
// definição da exceção
class TempExc extends Exception{
public TempExc () { super(); } // executa Exception()
public TempExc (String s) {System.out.println(s + "n");}
}

// dispara e propaga exceção
                                                      try{ metodo();}
void metodo() throws TempExc {
                                                     catch(TempExc e){
throw new TempExc();
                                                     }
}




                                 Prof. Adriano Teixeira de Souza
try { .... }
                                  catch (Tipo1 exc) { .....}
                                  catch (Tipo2 exc) {......}
   A cláusula finally            finally {<bloco de comandos>}
    ◦ é utilizada para forçar a execução de um bloco de
      código
    ◦ associada a um bloco try
    ◦ pode ser utilizada com ou sem o bloco catch
   A cláusula finally é executada nas seguintes
    condições:
    ◦ fim normal do método
    ◦ devido a uma instrução return ou break
    ◦ caso uma exceção tenha sido gerada



                              Prof. Adriano Teixeira de Souza
   Dado o seguinte enunciado: Escreva um
    programa em JAVA que recebe dois strings,
    S1 e S2 e um número N pela linha de
    comando e imprima:

    ◦ Os N primeiros   caracteres do String S1 separados por
      um “-”;
    ◦ Os N primeiros   caracteres do String S1 de traz para
      diante;
    ◦ Os N primeiros   caracteres do String S2 separados por
      um “-”;
    ◦ Os N primeiros   caracteres do String S2 de traz para
      diante.

                                 Prof. Adriano Teixeira de Souza
class ImpString {                                    public class TestaExceptions{
 public static void impSep(String str,int n){            static public void main(String args[]){
  String aux = "";
                                                             String s1,s2;
  for(int i=0; i<n; i++){
                                                             int n;
      aux = aux + str.charAt(i);
      if (i < n-1) aux = aux + '-';
   }                                                         s1 = args[0];
  System.out.println(aux);                                   s2 = args[1];
 }                                                           n = Integer.parseInt(args[2]);
public static void impInv(String str,int n){
  String aux = "";
   for(int i=n-1; i>=0; i--)                                 ImpString.impSep(s1,n);
      aux = aux + str.charAt(i);                             ImpString.impInv(s1,n);
   System.out.println(aux);
                                                             ImpString.impSep(s2,n);
 }}
                                                             ImpString.impInv(s2,n);
                                                         }
                                                     }
                                                Prof. Adriano Teixeira de Souza
   A solução anterior está correta se:
    ◦ O usuário informar os 3 parâmetros na linha de
      comando;

    ◦ O terceiro parâmetro for um número;

    ◦ O valor de N for menor ou igual ao comprimento dos
      strings informados;

   O tratamento de situações de erro é
    fundamental em aplicações reais !


                              Prof. Adriano Teixeira de Souza
   Exemplo:

    Entrada:                 Entrada:
    Teste exceções 4         Teste exceções 10
    Saída:                   Saída:
    T-e-s-t                  java.lang.StringIndexOutOfBoundsEx
    tseT                     ception: String index out of range: 5
    e-x-c-e
    ecxe
Entrada:                     Entrada:
Teste Teste Teste            Teste
Saída:                       Saída:
java.lang.NumberFormatExce   java.lang.StringIndexOutOfBoundsExc
ption: Teste                 eption: 1



                             Prof. Adriano Teixeira de Souza
public class TestaExceptions{
 static public boolean intOk(String s){
   for(int i=0; i<s.length(); i++)
       if (Character.isDigit(s.charAt(i)) == false) return(false);
   return(true);
 }
public static void main(String args[]){
   String s1,s2;                          Código normal entrelaçado com
   int n;                                 código excepcional:
   if (args.length != 3){                 acrescentou 14 linhas executáveis
     System.out.println("Sintaxe: <string> <string> <int>");
     System.exit(0);
   }
  if (intOk(args[2]) == false){
     System.out.println("O terceiro parâmetro deve ser um inteiro");
     System.exit(0);
   }
                                                                     (continua...)



                                   Prof. Adriano Teixeira de Souza
(...continua)

 s1 = args[0]; s2 = args[1];
 n = Integer.parseInt(args[2]);
 if (n < s1.length()){
     ImpString.impSep(s1,n);
     ImpString.impInv(s1,n);
   }
 else System.out.println("O valor de n é maior que o tamanho de S1");

  if (n < s2.length()){
      ImpString.impSep(s2,n);
      ImpString.impInv(s2,n);
    }
  else System.out.println("O valor de n é maior que o tamanho de S2");
 }
}
                               Prof. Adriano Teixeira de Souza
try{
                                                      ImpString.impSep(s1,n);
public class TestaExceptions{                         ImpString.impInv(s1,n);
 static public void main(String args[]){              ImpString.impSep(s2,n);
 String s1="";                                        ImpString.impInv(s2,n);
 String s2="";                                    }
 int n=0;                                     catch(Exception e){
 try{                                                 System.out.println("O valor de N é
     s1 = args[0];                            maior que S1 ou S2");
     s2 = args[1];                                    System.exit(0);
     n = Integer.parseInt(args[2]);               }
 }                                                }
 catch(Exception e){                          }
     System.out.println("Sintaxe: <string> <string> <int>");
     System.exit(0);
 }


                                           Prof. Adriano Teixeira de Souza
public class TestaExceptions{
                                        catch(NumberFormatException e){
 static public void main(String
                                                System.out.println("O terceiro argumento deve
args[]){
   String s1="";                        ser um int");
   String s2="";                        } catch(IndexOutOfBoundsException e){
   int n=0;                                     System.out.println("Sintaxe: <string> <string>
   try{                                 <int>");
       s1 = args[0];                    } catch (Exception e){
       s2 = args[1];                            System.out.println("O valor de N é maior que S1
       n = Integer.parseInt(args[2]);
                                        ou S2");
       ImpString.impSep(s1,n);
                                        }finally{
       ImpString.impInv(s1,n);
                                                System.out.println(”Sempre passa por aqui !!"); }
       ImpString.impSep(s2,n);
                                            }
       ImpString.impInv(s2,n);
   }                                    }



                                                   Prof. Adriano Teixeira de Souza
class MinhaExcecao extends Exception{
  private int val;
  public MinhaExcecao(int n){
    super("Minha excecao: valor de val="+n);
    val = n;
  }
  public int getVal(){ return(val); }
}

class ImpString {
 public static void impSep(String str,int n) throws MinhaExcecao{
   String aux = "";
   if (n == 0) throw(new MinhaExcecao(n));
   for(int i=0; i<n; i++){
     aux = aux + str.charAt(i);
     if (i < n-1) aux = aux + '-';
   }
   System.out.println(aux);
 }
                                                                             (continua...)

                                           Prof. Adriano Teixeira de Souza
public static void impInv(String str,int n){
   String aux = "";
   for(int i=n-1; i>=0; i--)
     aux = aux + str.charAt(i);
   System.out.println(aux);
  }}
public class TestaExceptions{
  static public void main(String args[]){
   String s1="";
   String s2="";
   int n=0;
   try{
     s1 = args[0];
     s2 = args[1];
     n = Integer.parseInt(args[2]);
     ImpString.impSep(s1,n);
     ImpString.impInv(s1,n);
     ImpString.impSep(s2,n);
     ImpString.impInv(s2,n);
   }                               (continua...)

                                             Prof. Adriano Teixeira de Souza
(...continua)

catch(NumberFormatException e){
      System.out.println("O terceiro argumento deve ser um int");
    }
catch(IndexOutOfBoundsException e){
      System.out.println("Sintaxe: <string> <string> <int>");
    }
catch(MinhaExcecao e){
      System.out.println(e.getMessage());
      int x = e.getVal();
    }
catch(Exception e){
      System.out.println("O valor de N é maior que S1 ou S2");
    }
 finally{
      System.out.println("É obrigado a passar por aqui");
    }
  }
}


                                            Prof. Adriano Teixeira de Souza

Mais conteúdo relacionado

Mais procurados

Estrutura de Dados - Características da linguagem C - 2
Estrutura de Dados - Características da linguagem C - 2Estrutura de Dados - Características da linguagem C - 2
Estrutura de Dados - Características da linguagem C - 2
Adriano Teixeira de Souza
 
Javascript para CSharpers 1 - Comparando
Javascript para CSharpers   1 - ComparandoJavascript para CSharpers   1 - Comparando
Javascript para CSharpers 1 - Comparando
Wesley Lemos
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04
Natanael Fonseca
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetros
Maurício Linhares
 

Mais procurados (18)

JAVA - Tratamento de Erros
JAVA - Tratamento de ErrosJAVA - Tratamento de Erros
JAVA - Tratamento de Erros
 
Tratamento de exceções em Java
Tratamento de exceções em JavaTratamento de exceções em Java
Tratamento de exceções em Java
 
Teste unitário
Teste unitárioTeste unitário
Teste unitário
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
Java 06
Java 06Java 06
Java 06
 
Programação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIProgramação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte II
 
Estrutura de Dados - Características da linguagem C - 2
Estrutura de Dados - Características da linguagem C - 2Estrutura de Dados - Características da linguagem C - 2
Estrutura de Dados - Características da linguagem C - 2
 
Javascript para CSharpers 1 - Comparando
Javascript para CSharpers   1 - ComparandoJavascript para CSharpers   1 - Comparando
Javascript para CSharpers 1 - Comparando
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04
 
Instruções de controle 1
Instruções de controle 1Instruções de controle 1
Instruções de controle 1
 
Java11
Java11Java11
Java11
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
 
Tratamento de exceção em java
Tratamento de exceção em javaTratamento de exceção em java
Tratamento de exceção em java
 
Parte1f
Parte1fParte1f
Parte1f
 
Aula 03-deadlock
Aula 03-deadlockAula 03-deadlock
Aula 03-deadlock
 
Desenvolvimento de Software
Desenvolvimento de SoftwareDesenvolvimento de Software
Desenvolvimento de Software
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetros
 
Aula05
Aula05Aula05
Aula05
 

Destaque

Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Adriano Teixeira de Souza
 
Estrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memóriaEstrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memória
Adriano Teixeira de Souza
 

Destaque (9)

IES GF - Circuitos Digitais - Parte 1
IES GF - Circuitos Digitais - Parte 1IES GF - Circuitos Digitais - Parte 1
IES GF - Circuitos Digitais - Parte 1
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
 
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
 
Estrutura de Dados - Ponteiros
Estrutura de Dados - PonteirosEstrutura de Dados - Ponteiros
Estrutura de Dados - Ponteiros
 
Boas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareBoas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_software
 
Estrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memóriaEstrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memória
 
Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentais
 
Estrutura de Dados - Aula 04 - Listas Estáticas
Estrutura de Dados - Aula 04 - Listas EstáticasEstrutura de Dados - Aula 04 - Listas Estáticas
Estrutura de Dados - Aula 04 - Listas Estáticas
 
Utilização de Heurísticas Bioinspiradas em Sistemas de Inteligência Coletiva ...
Utilização de Heurísticas Bioinspiradas em Sistemas de Inteligência Coletiva ...Utilização de Heurísticas Bioinspiradas em Sistemas de Inteligência Coletiva ...
Utilização de Heurísticas Bioinspiradas em Sistemas de Inteligência Coletiva ...
 

Semelhante a Paradigmas de Linguagens de Programação - Tratamento de Exceções

Tratamento de excees slide trabalho
Tratamento de excees slide trabalhoTratamento de excees slide trabalho
Tratamento de excees slide trabalho
Higor Klecyus
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
Maurício Linhares
 
Programando em python excecoes
Programando em python   excecoesProgramando em python   excecoes
Programando em python excecoes
samuelthiago
 
Apostila: Curso de java I
Apostila: Curso de java IApostila: Curso de java I
Apostila: Curso de java I
Verônica Veiga
 

Semelhante a Paradigmas de Linguagens de Programação - Tratamento de Exceções (20)

Java 13 Excecoes
Java 13 ExcecoesJava 13 Excecoes
Java 13 Excecoes
 
Excecoes em Java
Excecoes em JavaExcecoes em Java
Excecoes em Java
 
Erros, exceções e asserções
Erros, exceções e asserçõesErros, exceções e asserções
Erros, exceções e asserções
 
Exceptions Em Java UFF
Exceptions Em Java UFFExceptions Em Java UFF
Exceptions Em Java UFF
 
Exceptions
ExceptionsExceptions
Exceptions
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
Curso java 07 - exceções
Curso java   07 - exceçõesCurso java   07 - exceções
Curso java 07 - exceções
 
Aula Tratamento de Exceções
Aula Tratamento de ExceçõesAula Tratamento de Exceções
Aula Tratamento de Exceções
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
Java3
Java3Java3
Java3
 
Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceções
 
Tratamento de erros
Tratamento de errosTratamento de erros
Tratamento de erros
 
04 - Gerenciamento de Threads - II
04 -  Gerenciamento de Threads - II04 -  Gerenciamento de Threads - II
04 - Gerenciamento de Threads - II
 
Tratamento de excees slide trabalho
Tratamento de excees slide trabalhoTratamento de excees slide trabalho
Tratamento de excees slide trabalho
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
 
Programando em python excecoes
Programando em python   excecoesProgramando em python   excecoes
Programando em python excecoes
 
[Curso Java Basico - Exceptions] Aula 47: try, catch
[Curso Java Basico - Exceptions] Aula 47: try, catch[Curso Java Basico - Exceptions] Aula 47: try, catch
[Curso Java Basico - Exceptions] Aula 47: try, catch
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
Apostila: Curso de java I
Apostila: Curso de java IApostila: Curso de java I
Apostila: Curso de java I
 

Mais de Adriano Teixeira de Souza

Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
Adriano Teixeira de Souza
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
Adriano Teixeira de Souza
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Adriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Adriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Adriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Adriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Adriano Teixeira de Souza
 

Mais de Adriano Teixeira de Souza (20)

Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
 
Estrutura de dados em Java - Recursividade
Estrutura de dados em Java - RecursividadeEstrutura de dados em Java - Recursividade
Estrutura de dados em Java - Recursividade
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
 
Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)
 
Responsive web design
Responsive web designResponsive web design
Responsive web design
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
 
Estrutura de dados - Árvores Binárias
Estrutura de dados - Árvores BináriasEstrutura de dados - Árvores Binárias
Estrutura de dados - Árvores Binárias
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
 

Paradigmas de Linguagens de Programação - Tratamento de Exceções

  • 1. Prof. Adriano Teixeira de Souza Sistemas de tratamento de exceções Exceções em Java
  • 2. Componentes podem ter problemas durante a execução e reagir como: ◦ terminar o programa; ◦ retornar um valor de erro indicando falha; ◦ retornar e ignorar o problema; ◦ chamar uma função para tratar o erro, etc...  Problemas: erros e exceções ◦ representam situações anormais (exceções) ou inválidas (erros) durante o processo de execução  Componentes robustos: tentam sanar os problemas Prof. Adriano Teixeira de Souza
  • 3. Os problemas comuns de execução: ◦ falha na aquisição de um recurso (new, open..) ◦ tentativa de fazer algo impossível (divisão por zero, índice inválido..) ◦ outras condições inválidas (lista vazia, overflow..) classe objeto.metodo() dados método() Prof. Adriano Teixeira de Souza
  • 4. Premissas: ◦ Possíveis problemas de execução de um método podem ser antecipados pelo programador ◦ Situações de erro podem ser revertidas  Solução ideal ◦ tratamento de problemas separado do código normal ◦ Mecanismo: sistemas de tratamento de exceções (STE) Prof. Adriano Teixeira de Souza
  • 5. Mecanismos oferecidos pela LP  Um STE deve ser capaz de : ◦ detectar a ocorrência de uma situação anormal de processamento ◦ identificar o tipo de ocorrência e enviar um sinal ao programa (disparar uma exceção) ◦ capturar a exceção em algum ponto do programa ◦ tratar uma exceção em algum ponto do programa (ativar tratador) disparar detectar capturar tratar Prof. Adriano Teixeira de Souza
  • 6. Exceções podem ser disparadas de duas maneiras: ◦ Implicitamente, pelo ambiente operacional  o ambiente de execução não consegue executar um comando em um programa ◦ Explicitamente, pelo programa  uma função do programa não consegue prosseguir a execução disparar detectar capturar tratar Prof. Adriano Teixeira de Souza
  • 7. public class Zero { public static void main ( String[] args){ int numerador = 10; int denominador = 0; System.out.println(numerador/denominador); } // main mensagem } // Zero do JRE execução: java.lang.ArithmeticException: / by zero at Zero.main(Zero.java:xx) xx: número da linha do arquivo fonte onde ocorreu o erro Prof. Adriano Teixeira de Souza
  • 8. Indicação da região do programa que deve ser monitorada pelo sistema de tratamento de exceções  Sintaxe: try {<bloco de comandos>}  Exemplo: comandos que podem disparar exceções try { num= Integer.parseInt(stdin.readLine()); valido = true; } disparar detectar capturar tratar Prof. Adriano Teixeira de Souza
  • 9. Um comando catch tem as seguintes funções:  capturar um (determinado) tipo de exceção  implementar um tratador para aquele tipo de exceção  Sintaxe: catch(<tipo><arg>){<comandos>}  Exemplo: catch (NumberFormatException exc) { System.out.println(“Entrada invalida. Digite outra”); } disparar detectar capturar tratar Prof. Adriano Teixeira de Souza
  • 10. try { num= Integer.parseInt(stdin.readLine()); valido = true; } catch (NumberFormatException exc) { System.out.println(“Entrada invalida. Digite outra”); } catch (IOException exc) { System.out.println(“Problema de entrada. Terminando!”); System.exit(0); } Prof. Adriano Teixeira de Souza
  • 11. Exceções são objetos, instâncias de alguma sub-classe de java.lang.Throwable ◦ podem conter dados ◦ podem definir métodos  Um dos dados é um String inicializado em tempo de criação do objeto, consultado por ◦ Throwable.getMessage()  Throwable tem duas sub-classes: Error e Exception. ◦ Exceptions: podem ser capturadas e tratadas ◦ Errors: correspondem a problemas mais graves, que não podem ser recuperados Prof. Adriano Teixeira de Souza
  • 12. Instâncias da classe Error e suas extensões ◦ correspondem a problemas mais graves ocorridos no ambiente de execução ◦ conhecidas como exceções não-verificadas  Instâncias da classe Exception e suas extensões ◦ podem ser tratadas localmente ◦ conhecidas como exceções verificadas: o compilador “verifica” antes da execução do programa ◦ comandos que disparam exceções verificadas devem ser colocados em um bloco try Prof. Adriano Teixeira de Souza
  • 13. Exception: hierarquia de exceções Exception java.lang IOException Runtime java.io Exception contexto: java.lang.Object | NumberFormat java.lang.Throwable | java.lang.Exception Exception Prof. Adriano Teixeira de Souza
  • 14. Tratar exceções cria um fluxo de controle separado do fluxo normal de execução  Abordagens: ◦ tratar a exceção onde ela ocorre ( local) ◦ tratar a exceção em outro ponto do programa tratador de exceção unidade de unidade de chamada execução Prof. Adriano Teixeira de Souza
  • 15. comando anterior; try { num= Integer.parseInt(stdin.readLine()); valido = true; } catch (NumberFormatException exc) { System.out.println(“Entrada invalida. Digite outra”); } catch (IOException exc) { System.out.println(“Problema de entrada. Terminando!”); System.exit(0); } comando posterior; Prof. Adriano Teixeira de Souza
  • 16. comando anterior; try { num= Integer.parseInt(stdin.readLine()); valido = true; } catch (NumberFormatException exc) { System.out.println(“Entrada invalida. Digite outra”); } OU catch (IOException exc) { System.out.println(“Problema de entrada. Terminando!”); System.exit(0); } comando posterior; Prof. Adriano Teixeira de Souza
  • 17. chamada execução método() objeto.metodo() dados • Modelos de implementação Término: após a execução do tratador de exceção, a unidade onde ocorreu o erro é terminada Continuação: após a execução do tratador de exceção, a unidade continua a sua execução Prof. Adriano Teixeira de Souza
  • 18. A: chamada B: execução método() objeto.metodo() dados tratador no requisitante tratador local Hipótese 1: Hipótese 2: - B acusa erro e termina a - B faz tratamento local execução de erro - A captura o erro e trata a - Caso não consiga recuperar exceção o erro, recai na Hipótese 1 Prof. Adriano Teixeira de Souza
  • 19. Para buscar o tratador de exceção: ◦ percorre a ‘cadeia’ de ativações, a partir do ambiente local (pilha de execução) ◦ durante o caminho, são destruídos os objetos criados nos ambientes percorridos (retira da pilha de execução) ◦ se não for encontrado um tratador a exceção a exceção chega ao método main, que termina o programa m2() m1() Ver: método printStackTrace() main() Prof. Adriano Teixeira de Souza
  • 20. Sinal emitido pelo programa com a indicação da ocorrência de uma exceção ◦ if (…problema…) throw new IOException( );  Instanciação a partir de uma classe ◦ throw new <classe()> ◦ Exemplo: if (t==null) throw new NullPointerException();  Objeto já instanciado ◦ throw <objeto> ◦ Exception problema = new Exception (“Alerta!”); ◦ Exemplo:.... throw problema; ... Prof. Adriano Teixeira de Souza
  • 21. Considerando que: ◦ a unidade de execução pode detectar problemas mas geralmente não sabe como tratá-lo ◦ a unidade requisitante não pode detectar problemas mas geralmente sabe como tratá-los ◦ é conveniente saber quais são as exceções que um método pode disparar para providenciar um tratador  Cláusula throws : usada no cabeçalho de um método para indicar que ele propaga a exceção  Exemplo: ◦ public Integer(String s) throws NumberFormatException Prof. Adriano Teixeira de Souza
  • 22. Para forçar a ocorrência de uma exceção, utiliza-se a palavra reservada throw (no singular) public void metodo1( ) { try { throws (plural) metodo2( ); propaga exceção } catch (IOException e) { System.err.println(e); } } public void metodo2( ) throws IOException { if (…problema…) throw new IOException( ); }
  • 23. public String readLine() import java.io.*; throws IOException public class simplesIO { static BufferedReader stdin=new BufferedReader (new InputStreamReader(System.in)); public static void saida(String ms){ System.out.print (ms); } public static String entrada() throws IOException{ return stdin.readLine(); } public static void linha(){ // exemplo de chamada: System.out.println(); } try{linha=entrada();} }//simplesIO catch(IOException e){} Prof. Adriano Teixeira de Souza
  • 24. import java.io.*; public class simplesIO { static BufferedReader stdin=new BufferedReader (new InputStreamReader(System.in)); public static void saida(String ms){ System.out.print (ms);} public static String entrada(){ try { String lin= stdin.readLine(); return lin; } catch(IOException){// tratar aqui} } public static void linha(){ System.out.println(); // exemplo de chamada: } linha=entrada(); }//simplesIO Prof. Adriano Teixeira de Souza
  • 25. Exceções definidas pelo usuário Exception java.lang IOException RunTime java.io Exception Minha NumberFormat Exception Exception Prof. Adriano Teixeira de Souza
  • 26. // definição da exceção class TempExc extends Exception{ public TempExc () { super(); } // executa Exception() public TempExc (String s) {System.out.println(s + "n");} } // dispara e propaga exceção try{ metodo();} void metodo() throws TempExc { catch(TempExc e){ throw new TempExc(); } } Prof. Adriano Teixeira de Souza
  • 27. try { .... } catch (Tipo1 exc) { .....} catch (Tipo2 exc) {......}  A cláusula finally finally {<bloco de comandos>} ◦ é utilizada para forçar a execução de um bloco de código ◦ associada a um bloco try ◦ pode ser utilizada com ou sem o bloco catch  A cláusula finally é executada nas seguintes condições: ◦ fim normal do método ◦ devido a uma instrução return ou break ◦ caso uma exceção tenha sido gerada Prof. Adriano Teixeira de Souza
  • 28. Dado o seguinte enunciado: Escreva um programa em JAVA que recebe dois strings, S1 e S2 e um número N pela linha de comando e imprima: ◦ Os N primeiros caracteres do String S1 separados por um “-”; ◦ Os N primeiros caracteres do String S1 de traz para diante; ◦ Os N primeiros caracteres do String S2 separados por um “-”; ◦ Os N primeiros caracteres do String S2 de traz para diante. Prof. Adriano Teixeira de Souza
  • 29. class ImpString { public class TestaExceptions{ public static void impSep(String str,int n){ static public void main(String args[]){ String aux = ""; String s1,s2; for(int i=0; i<n; i++){ int n; aux = aux + str.charAt(i); if (i < n-1) aux = aux + '-'; } s1 = args[0]; System.out.println(aux); s2 = args[1]; } n = Integer.parseInt(args[2]); public static void impInv(String str,int n){ String aux = ""; for(int i=n-1; i>=0; i--) ImpString.impSep(s1,n); aux = aux + str.charAt(i); ImpString.impInv(s1,n); System.out.println(aux); ImpString.impSep(s2,n); }} ImpString.impInv(s2,n); } } Prof. Adriano Teixeira de Souza
  • 30. A solução anterior está correta se: ◦ O usuário informar os 3 parâmetros na linha de comando; ◦ O terceiro parâmetro for um número; ◦ O valor de N for menor ou igual ao comprimento dos strings informados;  O tratamento de situações de erro é fundamental em aplicações reais ! Prof. Adriano Teixeira de Souza
  • 31. Exemplo: Entrada: Entrada: Teste exceções 4 Teste exceções 10 Saída: Saída: T-e-s-t java.lang.StringIndexOutOfBoundsEx tseT ception: String index out of range: 5 e-x-c-e ecxe Entrada: Entrada: Teste Teste Teste Teste Saída: Saída: java.lang.NumberFormatExce java.lang.StringIndexOutOfBoundsExc ption: Teste eption: 1 Prof. Adriano Teixeira de Souza
  • 32. public class TestaExceptions{ static public boolean intOk(String s){ for(int i=0; i<s.length(); i++) if (Character.isDigit(s.charAt(i)) == false) return(false); return(true); } public static void main(String args[]){ String s1,s2; Código normal entrelaçado com int n; código excepcional: if (args.length != 3){ acrescentou 14 linhas executáveis System.out.println("Sintaxe: <string> <string> <int>"); System.exit(0); } if (intOk(args[2]) == false){ System.out.println("O terceiro parâmetro deve ser um inteiro"); System.exit(0); } (continua...) Prof. Adriano Teixeira de Souza
  • 33. (...continua) s1 = args[0]; s2 = args[1]; n = Integer.parseInt(args[2]); if (n < s1.length()){ ImpString.impSep(s1,n); ImpString.impInv(s1,n); } else System.out.println("O valor de n é maior que o tamanho de S1"); if (n < s2.length()){ ImpString.impSep(s2,n); ImpString.impInv(s2,n); } else System.out.println("O valor de n é maior que o tamanho de S2"); } } Prof. Adriano Teixeira de Souza
  • 34. try{ ImpString.impSep(s1,n); public class TestaExceptions{ ImpString.impInv(s1,n); static public void main(String args[]){ ImpString.impSep(s2,n); String s1=""; ImpString.impInv(s2,n); String s2=""; } int n=0; catch(Exception e){ try{ System.out.println("O valor de N é s1 = args[0]; maior que S1 ou S2"); s2 = args[1]; System.exit(0); n = Integer.parseInt(args[2]); } } } catch(Exception e){ } System.out.println("Sintaxe: <string> <string> <int>"); System.exit(0); } Prof. Adriano Teixeira de Souza
  • 35. public class TestaExceptions{ catch(NumberFormatException e){ static public void main(String System.out.println("O terceiro argumento deve args[]){ String s1=""; ser um int"); String s2=""; } catch(IndexOutOfBoundsException e){ int n=0; System.out.println("Sintaxe: <string> <string> try{ <int>"); s1 = args[0]; } catch (Exception e){ s2 = args[1]; System.out.println("O valor de N é maior que S1 n = Integer.parseInt(args[2]); ou S2"); ImpString.impSep(s1,n); }finally{ ImpString.impInv(s1,n); System.out.println(”Sempre passa por aqui !!"); } ImpString.impSep(s2,n); } ImpString.impInv(s2,n); } } Prof. Adriano Teixeira de Souza
  • 36. class MinhaExcecao extends Exception{ private int val; public MinhaExcecao(int n){ super("Minha excecao: valor de val="+n); val = n; } public int getVal(){ return(val); } } class ImpString { public static void impSep(String str,int n) throws MinhaExcecao{ String aux = ""; if (n == 0) throw(new MinhaExcecao(n)); for(int i=0; i<n; i++){ aux = aux + str.charAt(i); if (i < n-1) aux = aux + '-'; } System.out.println(aux); } (continua...) Prof. Adriano Teixeira de Souza
  • 37. public static void impInv(String str,int n){ String aux = ""; for(int i=n-1; i>=0; i--) aux = aux + str.charAt(i); System.out.println(aux); }} public class TestaExceptions{ static public void main(String args[]){ String s1=""; String s2=""; int n=0; try{ s1 = args[0]; s2 = args[1]; n = Integer.parseInt(args[2]); ImpString.impSep(s1,n); ImpString.impInv(s1,n); ImpString.impSep(s2,n); ImpString.impInv(s2,n); } (continua...) Prof. Adriano Teixeira de Souza
  • 38. (...continua) catch(NumberFormatException e){ System.out.println("O terceiro argumento deve ser um int"); } catch(IndexOutOfBoundsException e){ System.out.println("Sintaxe: <string> <string> <int>"); } catch(MinhaExcecao e){ System.out.println(e.getMessage()); int x = e.getVal(); } catch(Exception e){ System.out.println("O valor de N é maior que S1 ou S2"); } finally{ System.out.println("É obrigado a passar por aqui"); } } } Prof. Adriano Teixeira de Souza