SlideShare ist ein Scribd-Unternehmen logo
1 von 28
Downloaden Sie, um offline zu lesen
Programação Orientada a Objetos




       Tratamento de Exceções




           Ludimila Monjardim Casagrande
                       2012
Exceções

      Uma exceção é um sinal que indica que algum
         tipo de condição excepcional ocorreu durante a
         execução do programa.

      Assim, exceções estão associadas a condições
         de erro que não tinham como ser verificadas
         durante a compilação do programa.




Tratamento de Exceções   ©2012 Ludimila Monjardim Casagrande   2
Exceções

      Uma exceção pode ser lançada quando:
            O arquivo que o aplicativo está tentando abrir
             não existe;
            A conexão com a rede está apresentando
             problemas;
            Um índice inexistente de um array é acessado;
            Ocorre uma divisão de um número inteiro por
             zero, por exemplo.


Tratamento de Exceções    ©2012 Ludimila Monjardim Casagrande   3
Exceções

      As duas atividades associadas à manipulação
         de uma exceção são:

            geração: a sinalização de que uma condição
             excepcional (por exemplo, um erro) ocorreu, e

            captura: a manipulação (tratamento) da situação
             excepcional, onde as ações necessárias para a
             recuperação da situação de erro são definidas.




Tratamento de Exceções   ©2012 Ludimila Monjardim Casagrande   4
Exceções

      Para cada exceção que pode ocorrer durante a
         execução do código, um bloco de ações de
         tratamento (conhecido como exception handler)
         deve ser especificado.

      O compilador Java verifica e força que toda
         exceção “não-trivial” tenha um bloco de
         tratamento associado.
            As exceções desse tipo são chamadas de
             “checked exceptions”.

Tratamento de Exceções   ©2012 Ludimila Monjardim Casagrande   5
Tratamento de Exceções

      A sintaxe para captura e tratamento de exceção é:
          try {
               // bloco de código que inclui comandos que podem gerar uma exceção
          } catch (XException ex) {
               // bloco de tratamento associado à condição de exceção
               // XException ou a qualquer uma de suas subclasses,
               // identificada aqui pelo objeto com referência ex
          } catch (YException ey) {
               // bloco de tratamento para a situação de exceção
               // YException ou a qualquer uma de suas subclasses
          } finally {
               // bloco de código que sempre será executado após
               // o bloco try, independentemente de sua conclusão
               // ter ocorrido normalmente ou ter sido interrompida
          }

Tratamento de Exceções          ©2012 Ludimila Monjardim Casagrande                 6
Exemplo
 public static void main(String[] args) {
   try {
       FileWriter fileOut = new FileWriter("resultado.txt", true);
       for (int i = 0; i < args.length; i++){
           String arg = args[i];
           fileOut.write(arg + "n");
       }
       fileOut.close();
   } catch (IOException e) {
       System.out.println("Ocorreu um erro de entrada e saída.");
   } catch (Exception e) {
       System.out.println("Ocorreu uma exceção genérica.");
   }
 }
Tratamento de Exceções     ©2012 Ludimila Monjardim Casagrande       7
Categorias de Exceções

                                                        A classe Throwable é a raiz da
                                                        hierarquia de exceções na API.




Tratamento de Exceções   ©2012 Ludimila Monjardim Casagrande                             8
Hierarquia Error

      A hierarquia Error descreve erros internos e
         problemas ocasionados pelo término de
         recursos dentro da máquina virtual Java.
      Não se deve lançar um objeto desse tipo.
         Apenas a JVM deve fazer uso das classes
         derivadas de Error.
      Pouco se pode fazer quando um erro desse
         tipo acontece. Essas situações, em geral, são
         bastante raras, portanto, não é exigido que um
         programa trate tais exceções.

Tratamento de Exceções   ©2012 Ludimila Monjardim Casagrande   9
Hierarquia Exception

      Ao desenvolvermos aplicativos em Java,
         devemos utilizar as classes da hierarquia
         Exception.

      Esta também subdivide-se em duas, que são as
         exceções que derivam de RuntimeException e
         as demais subclasses que estendem
         diretamente a classe Exception (package
         java.lang).


Tratamento de Exceções   ©2012 Ludimila Monjardim Casagrande   10
RuntimeException

      Uma RuntimeException ocorre normalmente
         devido a erros de programação.
      Sendo assim, exceções desse tipo indicam
         condições que nunca devem acontecer se o
         programa estiver implementado
         adequadamente.
      Por essa razão, o compilador não exige que
         esse tipo de exceção seja tratada, logo, são
         chamadas de “unchecked exceptions”.

Tratamento de Exceções   ©2012 Ludimila Monjardim Casagrande   11
Exemplos de RuntimeException

      Algumas subclasses de RuntimeException são:
            NullPointerException
            IndexOutOfBoundsException
                  ArrayIndexOutOfBoundsException
                  StringIndexOutOfBoundsException
            ArithmeticException
            ClassCastException
            NegativeArraySizeException

Tratamento de Exceções      ©2012 Ludimila Monjardim Casagrande   12
Boas Práticas

      Para evitar ClassCastException, use sempre
         instanceof:

          public static Aluno converteParaAluno(Object obj) {
            Aluno a = null;
            if (obj instanceof Aluno){
                a = (Aluno)obj;
            }
            return a;
          }



Tratamento de Exceções      ©2012 Ludimila Monjardim Casagrande   13
Boas Práticas

      Para evitar NullPointerException, verifique sempre
         se a variável é diferente de null, antes de utilizá-la
         para acessar membros da classe:
          public static void main (String[] args){
            Object o = new Object();
            Aluno a = converteParaAluno(o);
            if( a != null ){
                String nome = a.getNome();
                System.out.println(nome);
            } else {
                System.out.println("O argumento não é do tipo Aluno");
            }
          }
Tratamento de Exceções        ©2012 Ludimila Monjardim Casagrande        14
Boas Práticas

      Para evitar ArrayIndexOutOfBoundsException,
         use sempre length:
          for (int i = 0; i < args.length; i++){
             String arg = args[i];
             System.out.println(arg + "n");
          }




Tratamento de Exceções       ©2012 Ludimila Monjardim Casagrande   15
Checked Exceptions

      As demais exceções, que são subclasses
         diretas de Exception, estão relacionadas a
         problemas que podem ocorrer com facilidade
         em aplicativos implementados corretamente,
         como por exemplo erros gerados por entrada
         incorreta de dados pelos usuários ou por
         problemas de leitura e escrita (I/O).

      O compilador exige que tais exceções sejam
         capturadas e tratadas, por isso são chamadas
         de “checked exceptions”.

Tratamento de Exceções   ©2012 Ludimila Monjardim Casagrande   16
Lançando uma Exceção

      Embora toda checked exception deva ser
         tratada, não é obrigatório tratá-la no mesmo
         escopo do método no qual ela foi gerada.
      Sendo assim, é possível propagar a exceção
         para um nível acima na pilha de invocações.
      Para tanto, o método que está deixando de
         capturar e tratar a exceção faz uso da palavra-
         chave throws na sua declaração.


Tratamento de Exceções   ©2012 Ludimila Monjardim Casagrande   17
Lançando uma Exceção

      Existem vários métodos da API do Java que são
         declarados de forma a lançar exceções.
      Por exemplo, o construtor da classe FileReader é
         declarado como segue:

           public FileReader(String filename)
                            throws FileNotFoundException

      Se um objeto da classe for criado usando um nome
         de arquivo inexistente, uma exceção do tipo
         FileNotFoundException é lançada.

Tratamento de Exceções    ©2012 Ludimila Monjardim Casagrande   18
Lançando uma Exceção
  // Podemos criar nossos próprios métodos e lançar as possíveis exceções geradas:
  public static void copyFile(String sourceFile) throws FileNotFoundException,
                                                        IOException {
     File inputFile = new File(sourceFile);
     File outputFile = new File("Output.txt");

       FileReader in = new FileReader(inputFile);
       FileWriter out = new FileWriter(outputFile);
       int c;

       while ((c = in.read()) != -1){
           out.write(c);
       }
       in.close();
       out.close();

       System.out.println("Cópia realizada com sucesso.");
  }
Tratamento de Exceções            ©2012 Ludimila Monjardim Casagrande                19
Capturando as Exceções Lançadas
  import java.io.*;

  public class Copy {
       public static void main(String[] args) {
         try {
             copyFile("Copy.txt");
         } catch (FileNotFoundException e) {
             System.out.println("Arquivo não encontrado.");
         } catch (IOException e) {
             System.out.println("Ocorreu um erro de entrada e saída.");
         }
       }
       public static void copyFile(String file) throws FileNotFoundException,
                                                       IOException { …
  }

Tratamento de Exceções       ©2012 Ludimila Monjardim Casagrande                20
Criação de uma Classe de Exceção

      Exceções são classes. Assim, é possível que
         uma aplicação defina suas próprias exceções
         através do mecanismo de definição de classes.
      Para criar uma nova exceção deve-se estender
         a classe Exception ou uma de suas subclasses.
      Um classe de exceção pode conter tudo o que
         uma classe regular contém, isto é, atributos,
         construtores e métodos.


Tratamento de Exceções   ©2012 Ludimila Monjardim Casagrande   21
Exemplo

      Veja o exemplo de uma nova classe de exceção
         que pode ser utilizada na classe Resultado.java:
          public class NotaInvalidaException extends Exception {

               public NotaInvalidaException() {
                 super();
               }

               public NotaInvalidaException(String message) {
                 super(message);
               }
          }

Tratamento de Exceções        ©2012 Ludimila Monjardim Casagrande   22
Definindo uma Condição de Exceção

      Para gerar uma condição de erro durante a
         execução de um método e lançar uma exceção
         específica, um objeto dessa classe deve ser
         criado e, através do comando throw, propagado
         para os métodos anteriores na pilha de
         execução.




Tratamento de Exceções   ©2012 Ludimila Monjardim Casagrande   23
Exemplo
 public class Resultado{
      private double nota;
      public double getNota() {
        return nota;
      }
      public void setNota(double nota) throws NotaInvalidaException {
        if(nota >= 0.0 && nota <= 10.0){
            this.nota = nota;
        } else {
            throw new NotaInvalidaException("Erro: A nota deve pertencer
                                             ao intervalo de 0 a 10.");
        }
      }
 }

Tratamento de Exceções       ©2012 Ludimila Monjardim Casagrande           24
O Bloco finally

      O bloco finally, quando presente, é sempre
         executado.
      Em geral, ele inclui comandos que liberam
         recursos que eventualmente possam ter sido
         alocados durante o processamento do bloco try
         e que podem ser liberados, independentemente
         de a execução ter encerrado com sucesso ou
         ter sido interrompida por uma condição de
         exceção.
      A presença desse bloco é opcional.

Tratamento de Exceções   ©2012 Ludimila Monjardim Casagrande   25
Exemplo
   private static Vector vector;
   private static final int SIZE = 10;
   public static void main(String[] args) {
       PrintWriter out = null;
       try {
            out = new PrintWriter(new FileWriter("OutFile.txt"));
            for (int i = 0; i < SIZE; i++) {
                 out.println(“Valor da posição: " + i + " = " + vector.elementAt(i));
            }
       } catch (IOException e) {
            System.err.println("Caught IOException: " + e.getMessage());
       } finally {
            if (out != null) {
                 System.out.println("Closing PrintWriter");
                 out.close();
            } else {
                 System.out.println("PrintWriter not open");
            }
       }
   }
Tratamento de Exceções           ©2012 Ludimila Monjardim Casagrande                    26
Tutoriais do Java

      The Java Tutorials
            Getting Started
                  http://java.sun.com/docs/books/tutorial/getStarted/
            Learning the Java Language
                  http://java.sun.com/docs/books/tutorial/java/




Tratamento de Exceções        ©2012 Ludimila Monjardim Casagrande        27
Referências

      Complete Java 2 Certification
         Study Guide
         Sybex

      Java: Como programar
         Autores: H. M. Deitel e P. J. Deitel
         Editora: Pearson – 6ª Edição




Tratamento de Exceções   ©2012 Ludimila Monjardim Casagrande   28

Weitere ähnliche Inhalte

Was ist angesagt?

Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a ObjetosIgor Takenami
 
Aula 03 - Introdução aos Diagramas de Atividade
Aula 03 - Introdução aos Diagramas de AtividadeAula 03 - Introdução aos Diagramas de Atividade
Aula 03 - Introdução aos Diagramas de AtividadeAlberto Simões
 
Java: Introdução à Orientação a Objetos
Java: Introdução à Orientação a ObjetosJava: Introdução à Orientação a Objetos
Java: Introdução à Orientação a ObjetosArthur Emanuel
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POODaniel Brandão
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaDaniel Brandão
 
Java: Heranca e polimorfismo
Java: Heranca e polimorfismoJava: Heranca e polimorfismo
Java: Heranca e polimorfismoArthur Emanuel
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggersDaniel Maia
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVAMoises Omena
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosDaniel Brandão
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Daniel Brandão
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADLeinylson Fontinele
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 

Was ist angesagt? (20)

Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
POO - 11 - Prática de Herança
POO - 11 - Prática de HerançaPOO - 11 - Prática de Herança
POO - 11 - Prática de Herança
 
Aula 03 - Introdução aos Diagramas de Atividade
Aula 03 - Introdução aos Diagramas de AtividadeAula 03 - Introdução aos Diagramas de Atividade
Aula 03 - Introdução aos Diagramas de Atividade
 
Java: Introdução à Orientação a Objetos
Java: Introdução à Orientação a ObjetosJava: Introdução à Orientação a Objetos
Java: Introdução à Orientação a Objetos
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
 
Linguagem C - Vetores
Linguagem C - VetoresLinguagem C - Vetores
Linguagem C - Vetores
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
 
Java: Heranca e polimorfismo
Java: Heranca e polimorfismoJava: Heranca e polimorfismo
Java: Heranca e polimorfismo
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggers
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
POO - 06 - Encapsulamento
POO - 06 - EncapsulamentoPOO - 06 - Encapsulamento
POO - 06 - Encapsulamento
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
 
POO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de MétodosPOO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de Métodos
 
Introdução à linguagem UML
Introdução à linguagem UMLIntrodução à linguagem UML
Introdução à linguagem UML
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
 
POO - Aula 10 - Polimorfismo
POO - Aula 10 - PolimorfismoPOO - Aula 10 - Polimorfismo
POO - Aula 10 - Polimorfismo
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
POO - 10 - Herança
POO - 10 - HerançaPOO - 10 - Herança
POO - 10 - Herança
 

Ähnlich wie POO Exceções

Excecoes
ExcecoesExcecoes
ExcecoesEMSNEWS
 
Apostila: Curso de java I
Apostila: Curso de java IApostila: Curso de java I
Apostila: Curso de java IVerônica Veiga
 
Certificação Java: Exceções
Certificação Java: ExceçõesCertificação Java: Exceções
Certificação Java: ExceçõesEduardo Mendes
 
Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceçõesFAFICA
 
Tratamento de exceções em Java
Tratamento de exceções em JavaTratamento de exceções em Java
Tratamento de exceções em JavaWilson Júnior
 
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)Helder da Rocha
 
Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceçõesAlvaro Oliveira
 
04 - Gerenciamento de Threads - II
04 -  Gerenciamento de Threads - II04 -  Gerenciamento de Threads - II
04 - Gerenciamento de Threads - IIFabio Moura Pereira
 
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 IIFabio Moura Pereira
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesAdriano Teixeira de Souza
 

Ähnlich wie POO Exceções (20)

Excepções JAVA
Excepções JAVAExcepções JAVA
Excepções JAVA
 
Exceptions Em Java UFF
Exceptions Em Java UFFExceptions Em Java UFF
Exceptions Em Java UFF
 
Excecoes
ExcecoesExcecoes
Excecoes
 
Curso java 07 - exceções
Curso java   07 - exceçõesCurso java   07 - exceções
Curso java 07 - exceções
 
Erros, exceções e asserções
Erros, exceções e asserçõesErros, exceções e asserções
Erros, exceções e asserções
 
Erros, exceções e asserções
Erros, exceções e asserçõesErros, exceções e asserções
Erros, exceções e asserções
 
Excecoes em Java
Excecoes em JavaExcecoes em Java
Excecoes em Java
 
Aula Tratamento de Exceções
Aula Tratamento de ExceçõesAula Tratamento de Exceções
Aula Tratamento de Exceções
 
Tratamento de exceções em Java
Tratamento de exceções em JavaTratamento de exceções em Java
Tratamento de exceções em Java
 
Apostila: Curso de java I
Apostila: Curso de java IApostila: Curso de java I
Apostila: Curso de java I
 
Certificação Java: Exceções
Certificação Java: ExceçõesCertificação Java: Exceções
Certificação Java: Exceções
 
Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceções
 
Programação Orientada por Objectos - Aula 5
Programação Orientada por Objectos - Aula 5Programação Orientada por Objectos - Aula 5
Programação Orientada por Objectos - Aula 5
 
Tratamento de exceções em Java
Tratamento de exceções em JavaTratamento de exceções em Java
Tratamento de exceções em Java
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)
 
Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceções
 
04 - Gerenciamento de Threads - II
04 -  Gerenciamento de Threads - II04 -  Gerenciamento de Threads - II
04 - Gerenciamento de Threads - II
 
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
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de Exceções
 

Mehr von Ludimila Monjardim Casagrande

POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosLudimila Monjardim Casagrande
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosLudimila Monjardim Casagrande
 

Mehr von Ludimila Monjardim Casagrande (19)

Gerenciamento Ágil de Projetos com Scrum
Gerenciamento Ágil de Projetos com ScrumGerenciamento Ágil de Projetos com Scrum
Gerenciamento Ágil de Projetos com Scrum
 
POO - 23 - Coleções da API do Java
POO -  23 - Coleções da API do Java POO -  23 - Coleções da API do Java
POO - 23 - Coleções da API do Java
 
POO - 21 - Java e Banco de Dados
POO - 21 - Java e Banco de DadosPOO - 21 - Java e Banco de Dados
POO - 21 - Java e Banco de Dados
 
POO - 20 - Wrapper Classes
POO - 20 - Wrapper ClassesPOO - 20 - Wrapper Classes
POO - 20 - Wrapper Classes
 
POO - 19 - Elementos Estáticos
POO - 19 - Elementos EstáticosPOO - 19 - Elementos Estáticos
POO - 19 - Elementos Estáticos
 
POO - 17 - Interfaces
POO - 17 - InterfacesPOO - 17 - Interfaces
POO - 17 - Interfaces
 
POO - 16 - Polimorfismo
POO - 16 - PolimorfismoPOO - 16 - Polimorfismo
POO - 16 - Polimorfismo
 
POO - 15 - Passagem de Argumentos
POO - 15 - Passagem de ArgumentosPOO - 15 - Passagem de Argumentos
POO - 15 - Passagem de Argumentos
 
POO - 13 - Arrays em Java
POO - 13 - Arrays em JavaPOO - 13 - Arrays em Java
POO - 13 - Arrays em Java
 
POO - 12 - A Classe Object
POO - 12 - A Classe ObjectPOO - 12 - A Classe Object
POO - 12 - A Classe Object
 
POO - 09 - Entradas e Saídas em Java
POO - 09 - Entradas e Saídas em JavaPOO - 09 - Entradas e Saídas em Java
POO - 09 - Entradas e Saídas em Java
 
POO - 08 - Prática de Encapsulamento
POO - 08 - Prática de EncapsulamentoPOO - 08 - Prática de Encapsulamento
POO - 08 - Prática de Encapsulamento
 
POO - 07 - Operadores do Java
POO - 07 - Operadores do  JavaPOO - 07 - Operadores do  Java
POO - 07 - Operadores do Java
 
POO - 05 - Ambiente de Desenvolvimento
POO - 05 - Ambiente de DesenvolvimentoPOO - 05 - Ambiente de Desenvolvimento
POO - 05 - Ambiente de Desenvolvimento
 
POO - 04 - Variávies em Java
POO - 04 - Variávies em JavaPOO - 04 - Variávies em Java
POO - 04 - Variávies em Java
 
POO - 24 - Classes Básicas do Java - Datas
POO - 24 - Classes Básicas do Java - DatasPOO - 24 - Classes Básicas do Java - Datas
POO - 24 - Classes Básicas do Java - Datas
 
POO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em JavaPOO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em Java
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
 

POO Exceções

  • 1. Programação Orientada a Objetos Tratamento de Exceções Ludimila Monjardim Casagrande 2012
  • 2. Exceções  Uma exceção é um sinal que indica que algum tipo de condição excepcional ocorreu durante a execução do programa.  Assim, exceções estão associadas a condições de erro que não tinham como ser verificadas durante a compilação do programa. Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 2
  • 3. Exceções  Uma exceção pode ser lançada quando:  O arquivo que o aplicativo está tentando abrir não existe;  A conexão com a rede está apresentando problemas;  Um índice inexistente de um array é acessado;  Ocorre uma divisão de um número inteiro por zero, por exemplo. Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 3
  • 4. Exceções  As duas atividades associadas à manipulação de uma exceção são:  geração: a sinalização de que uma condição excepcional (por exemplo, um erro) ocorreu, e  captura: a manipulação (tratamento) da situação excepcional, onde as ações necessárias para a recuperação da situação de erro são definidas. Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 4
  • 5. Exceções  Para cada exceção que pode ocorrer durante a execução do código, um bloco de ações de tratamento (conhecido como exception handler) deve ser especificado.  O compilador Java verifica e força que toda exceção “não-trivial” tenha um bloco de tratamento associado.  As exceções desse tipo são chamadas de “checked exceptions”. Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 5
  • 6. Tratamento de Exceções  A sintaxe para captura e tratamento de exceção é: try { // bloco de código que inclui comandos que podem gerar uma exceção } catch (XException ex) { // bloco de tratamento associado à condição de exceção // XException ou a qualquer uma de suas subclasses, // identificada aqui pelo objeto com referência ex } catch (YException ey) { // bloco de tratamento para a situação de exceção // YException ou a qualquer uma de suas subclasses } finally { // bloco de código que sempre será executado após // o bloco try, independentemente de sua conclusão // ter ocorrido normalmente ou ter sido interrompida } Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 6
  • 7. Exemplo public static void main(String[] args) { try { FileWriter fileOut = new FileWriter("resultado.txt", true); for (int i = 0; i < args.length; i++){ String arg = args[i]; fileOut.write(arg + "n"); } fileOut.close(); } catch (IOException e) { System.out.println("Ocorreu um erro de entrada e saída."); } catch (Exception e) { System.out.println("Ocorreu uma exceção genérica."); } } Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 7
  • 8. Categorias de Exceções A classe Throwable é a raiz da hierarquia de exceções na API. Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 8
  • 9. Hierarquia Error  A hierarquia Error descreve erros internos e problemas ocasionados pelo término de recursos dentro da máquina virtual Java.  Não se deve lançar um objeto desse tipo. Apenas a JVM deve fazer uso das classes derivadas de Error.  Pouco se pode fazer quando um erro desse tipo acontece. Essas situações, em geral, são bastante raras, portanto, não é exigido que um programa trate tais exceções. Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 9
  • 10. Hierarquia Exception  Ao desenvolvermos aplicativos em Java, devemos utilizar as classes da hierarquia Exception.  Esta também subdivide-se em duas, que são as exceções que derivam de RuntimeException e as demais subclasses que estendem diretamente a classe Exception (package java.lang). Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 10
  • 11. RuntimeException  Uma RuntimeException ocorre normalmente devido a erros de programação.  Sendo assim, exceções desse tipo indicam condições que nunca devem acontecer se o programa estiver implementado adequadamente.  Por essa razão, o compilador não exige que esse tipo de exceção seja tratada, logo, são chamadas de “unchecked exceptions”. Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 11
  • 12. Exemplos de RuntimeException  Algumas subclasses de RuntimeException são:  NullPointerException  IndexOutOfBoundsException  ArrayIndexOutOfBoundsException  StringIndexOutOfBoundsException  ArithmeticException  ClassCastException  NegativeArraySizeException Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 12
  • 13. Boas Práticas  Para evitar ClassCastException, use sempre instanceof: public static Aluno converteParaAluno(Object obj) { Aluno a = null; if (obj instanceof Aluno){ a = (Aluno)obj; } return a; } Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 13
  • 14. Boas Práticas  Para evitar NullPointerException, verifique sempre se a variável é diferente de null, antes de utilizá-la para acessar membros da classe: public static void main (String[] args){ Object o = new Object(); Aluno a = converteParaAluno(o); if( a != null ){ String nome = a.getNome(); System.out.println(nome); } else { System.out.println("O argumento não é do tipo Aluno"); } } Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 14
  • 15. Boas Práticas  Para evitar ArrayIndexOutOfBoundsException, use sempre length: for (int i = 0; i < args.length; i++){ String arg = args[i]; System.out.println(arg + "n"); } Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 15
  • 16. Checked Exceptions  As demais exceções, que são subclasses diretas de Exception, estão relacionadas a problemas que podem ocorrer com facilidade em aplicativos implementados corretamente, como por exemplo erros gerados por entrada incorreta de dados pelos usuários ou por problemas de leitura e escrita (I/O).  O compilador exige que tais exceções sejam capturadas e tratadas, por isso são chamadas de “checked exceptions”. Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 16
  • 17. Lançando uma Exceção  Embora toda checked exception deva ser tratada, não é obrigatório tratá-la no mesmo escopo do método no qual ela foi gerada.  Sendo assim, é possível propagar a exceção para um nível acima na pilha de invocações.  Para tanto, o método que está deixando de capturar e tratar a exceção faz uso da palavra- chave throws na sua declaração. Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 17
  • 18. Lançando uma Exceção  Existem vários métodos da API do Java que são declarados de forma a lançar exceções.  Por exemplo, o construtor da classe FileReader é declarado como segue: public FileReader(String filename) throws FileNotFoundException  Se um objeto da classe for criado usando um nome de arquivo inexistente, uma exceção do tipo FileNotFoundException é lançada. Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 18
  • 19. Lançando uma Exceção // Podemos criar nossos próprios métodos e lançar as possíveis exceções geradas: public static void copyFile(String sourceFile) throws FileNotFoundException, IOException { File inputFile = new File(sourceFile); File outputFile = new File("Output.txt"); FileReader in = new FileReader(inputFile); FileWriter out = new FileWriter(outputFile); int c; while ((c = in.read()) != -1){ out.write(c); } in.close(); out.close(); System.out.println("Cópia realizada com sucesso."); } Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 19
  • 20. Capturando as Exceções Lançadas import java.io.*; public class Copy { public static void main(String[] args) { try { copyFile("Copy.txt"); } catch (FileNotFoundException e) { System.out.println("Arquivo não encontrado."); } catch (IOException e) { System.out.println("Ocorreu um erro de entrada e saída."); } } public static void copyFile(String file) throws FileNotFoundException, IOException { … } Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 20
  • 21. Criação de uma Classe de Exceção  Exceções são classes. Assim, é possível que uma aplicação defina suas próprias exceções através do mecanismo de definição de classes.  Para criar uma nova exceção deve-se estender a classe Exception ou uma de suas subclasses.  Um classe de exceção pode conter tudo o que uma classe regular contém, isto é, atributos, construtores e métodos. Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 21
  • 22. Exemplo  Veja o exemplo de uma nova classe de exceção que pode ser utilizada na classe Resultado.java: public class NotaInvalidaException extends Exception { public NotaInvalidaException() { super(); } public NotaInvalidaException(String message) { super(message); } } Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 22
  • 23. Definindo uma Condição de Exceção  Para gerar uma condição de erro durante a execução de um método e lançar uma exceção específica, um objeto dessa classe deve ser criado e, através do comando throw, propagado para os métodos anteriores na pilha de execução. Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 23
  • 24. Exemplo public class Resultado{ private double nota; public double getNota() { return nota; } public void setNota(double nota) throws NotaInvalidaException { if(nota >= 0.0 && nota <= 10.0){ this.nota = nota; } else { throw new NotaInvalidaException("Erro: A nota deve pertencer ao intervalo de 0 a 10."); } } } Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 24
  • 25. O Bloco finally  O bloco finally, quando presente, é sempre executado.  Em geral, ele inclui comandos que liberam recursos que eventualmente possam ter sido alocados durante o processamento do bloco try e que podem ser liberados, independentemente de a execução ter encerrado com sucesso ou ter sido interrompida por uma condição de exceção.  A presença desse bloco é opcional. Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 25
  • 26. Exemplo private static Vector vector; private static final int SIZE = 10; public static void main(String[] args) { PrintWriter out = null; try { out = new PrintWriter(new FileWriter("OutFile.txt")); for (int i = 0; i < SIZE; i++) { out.println(“Valor da posição: " + i + " = " + vector.elementAt(i)); } } catch (IOException e) { System.err.println("Caught IOException: " + e.getMessage()); } finally { if (out != null) { System.out.println("Closing PrintWriter"); out.close(); } else { System.out.println("PrintWriter not open"); } } } Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 26
  • 27. Tutoriais do Java  The Java Tutorials  Getting Started  http://java.sun.com/docs/books/tutorial/getStarted/  Learning the Java Language  http://java.sun.com/docs/books/tutorial/java/ Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 27
  • 28. Referências  Complete Java 2 Certification Study Guide Sybex  Java: Como programar Autores: H. M. Deitel e P. J. Deitel Editora: Pearson – 6ª Edição Tratamento de Exceções ©2012 Ludimila Monjardim Casagrande 28