Escola Superior de Gestão e Tecnologia. Tratamento de Exceções

Documentos relacionados
Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Aplicações, durante a execução, podem incorrer em muitas espécies de erros de vários graus de severidade Quando métodos são invocados sobre um objeto:


UNIVERSIDADE FEDERAL DO PARANÁ

Tratamento de Exceções. Alberto Costa Neto DComp - UFS

O que é uma Exceção? Call Stack. Java Tratamento de Exceção. de métodos que foram usados até chegar na presente instrução.

Prova de Java. 1) Copie o programa abaixo no eclipse e complete-o, utilizando os conceitos aprendidos durante o curso. (4 pontos)

Erros, exceçõ. ções e asserçõ

Capítulo 5. Tratamento de excepções

Exercícios de Revisão Java Básico

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

1.6. Tratamento de Exceções

Aula 04 Operadores e Entrada de Dados. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Java 2 Standard Edition Como criar classes e objetos

Acesso a Banco. Conexão em Java. Conexão em Java. Programação Orientada a Objetos Profa. Cristiane e Prof. Daniel

Java. Marcio de Carvalho Victorino

Programação Orientada a Objetos com Java. Prof. Júlio Machado julio.machado@pucrs.br

Programação Estruturada e Orientada a Objetos. Tratamento de Exceções

Tratamento de Exceções cont. Profa. Thienne Johnson EACH/USP

Aula 30 - Sockets em Java

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

Guia de Fatores de Qualidade de OO e Java

UNIVERSIDADE ESTADUAL DO OESTE DO PARANÁ CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS COLEGIADO DE INFORMÁTICA

Sobre o Professor Dr. Sylvio Barbon Junior

Programação de Computadores II TCC /Turma A 1

7 RTTI e Interfaces. Desenvolvimento OO com Java. Vítor E. Silva Souza (vitorsouza@inf.ufes.br)

Programação Na Web. Linguagem Java Parte II. break com o nome do bloco. Sintaxe. Nome do bloco. Termina o bloco. António Gonçalves ...

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Tratamento de Exceção. Tratamento de Exceções. Vantagens de TE. Exemplos de Exceções. Exemplo: Divide1 (sem TE)

Equivale a um conjunto de if 's encadeados, porém mais estruturado.

Programação Orientada a Objetos II

Tratamento de Exceções

BC0501 Linguagens de Programação

Curso Java Starter. 1

Mecanismos de Comunicação. Sockets em java (

Slide 1 Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Tratamento de Exceções. LPG II Java. Tratamento de Exceções. Conceito de Exceções. Exemplo

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.

Invocação de Métodos Remotos

Bacharelado em Ciência e Tecnologia BC Processamento da Informação Teoria Arquivos Prof. Edson Pinheiro Pimentel edson.pimentel@ufabc.edu.

Módulo 07 Características Avançadas de Classes

Os Sete Hábitos das Exceções Altamente Eficazes

Programação online em Java

Orientação a Objetos

Criando documentação com javadoc

INTRODUÇÃO 12. DOCUMENTAÇÃO INTRODUÇÃO INTRODUÇÃO

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Orientação a Objetos

A ) O cliente terá que implementar uma interface remota. . Definir a interface remota com os métodos que poderão ser acedidos remotamente

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

BC0505 Processamento da Informação

Tratamento de Exceções. Java Avançado. Tratamento de Exceções. Conceito de Exceções. Exemplo

INF1013 MODELAGEM DE SOFTWARE

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Aula 2. Objetivos Conceitos; Instalação do Text Pad; Entendendo o código java do AloMundo1 Codificação do AloMundo2,AloMundo3 e AloMundo4.

Polimorfismo. Prof. Leonardo Barreto Campos 1

CURSO DE PROGRAMAÇÃO EM JAVA

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

Java : Comunicação Cliente-Servidor.

1. Estude e implemente a classe Exemplo1 apresentada abaixo:

Criando um script simples

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

TRATAMENTO DE EXCEÇÕES

Lição 1 Introdução à programação de computadores

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Um pouco do Java. Prof. Eduardo

Threads e Sockets em Java. Threads em Java. Programas e Processos

Projeto de Software Orientado a Objeto

THREADS EM JAVA. George Gomes Cabral

INSTITUTO DE COMPUTAÇÃO UNICAMP 1o. SEMESTRE DE Profa. Cecília M. F. Rubira

Tratamento de Exceções. Profa. Thienne Johnson EACH/USP

FBV - Linguagem de Programação II. Um pouco sobre Java

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

insfcanceof new public switch transient while byte continue extends for int null

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

DEFINIÇÃO DE MÉTODOS

Java Como Programar, 8/E. (C) 2010 Pearson Education, Inc. Todos os direitos reservados.

Programação Orientada a Objetos (DPADF 0063)

Programação Orientada a Objetos em java. Polimorfismo

O tratamento de erros em Java

Herança. Alberto Costa Neto DComp - UFS

Objetos Implícitos. Conceito. Instanciados pelo próprio contêiner. Disponíveis em quaisquer páginas JSP.

Chamadas Remotas de Procedimentos (RPC) O Conceito de Procedimentos. RPC: Programa Distribuído. RPC: Modelo de Execução

Programação por Objectos. Java

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Caso 1 NetScanner Main

Introdução a Java. Hélder Nunes

Programação de Computadores - I. Profª Beatriz Profº Israel

Padrão Arquitetura em Camadas

Sistemas Distribuídos

Simulado de Linguagem de Programação Java

22/9/16. Agenda. Erros. Erros. Exceções. Mecanismo de exceções

Transcrição:

Escola Superior de Gestão e Tecnologia Tratamento de Exceções

Objetivos Compreender como o tratamento de exceção e de erro funciona. Como u4lizar try, throw e catch para detectar, indicar e tratar exceções, respec4vamente. Como u4lizar o bloco finally para liberar recursos. Como os rastreamentos de pilha ajudam na depuração. Como criar exceções encadeadas que mantêm informações do rastreamento de pilha completo. Como as exceções são organizadas em uma hierarquia de classes de exceção. Como declarar novas classes de exceção.

Motivação Detecção e tratamento de ERROS que podem ocorrer durante a execução do programa. Exemplo: Ø Programa que captura um número inteiro do teclado para dividir por 1.000.

O que é uma exceção? Exceção Ø uma indicação de um problema que ocorre durante a execução de um programa. Tratamento de exceções Ø resolver exceções que poderiam ocorrer para que o programa con4nue ou termine elegantemente. O tratamento de exceções permite que os programadores criem programas mais robustos e tolerantes a falhas.

Exemplo import java.io.bufferedreader; import java.io.ioexception; import java.io.inputstreamreader; public class Exceção { public static void main(string[] arg) throws IOException { InputStreamReader leitor = new InputStreamReader(System.in); BufferedReader teclado = new BufferedReader(leitor); System.out.print("Digite um numero: "); int num = Integer.parseInt(teclado.readLine()); int quoc = 1000 / num; } } System.out.println("1000/" + num + " = " + quoc); System.out.println("fim de programa");

O que acontece quando digitamos 0?

Por que tratar exceções? É possível evitar o erro anterior com if (num == 0){ } MAS: Ø Misturar a lógica do programa com a lógica do tratamento de erros pode tornar os programas dijceis de ler, modificar, manter e depurar. O tratamento de exceções permite aos programadores remover código de tratamento de erro da linha principal de execução do programa. Ø Aprimora a clareza. Ø Aprimora a modificabilidade.

Se os problemas potenciais ocorrem raramente, mesclar o programa e a lógica do tratamento de erro pode degradar o desempenho de um programa, porque o programa deve realizar testes frequentes para determinar se a tarefa foi executada corretamente e se a próxima tarefa pode ser realizada.

Exemplo: Divisão por zero sem tratamento de exceções Exceção lançada uma exceção que ocorreu. Rastreamento de pilha: Ø Nome da exceção em uma mensagem descri4va que indica o problema. Ø Pilha de chamadas de método. ArithmeticException pode surgir a pargr de diferentes problemas na aritmégca. Ponto de lançamento Ø Ponto inicial em que a exceção ocorre, linha superior da cadeia de chamadas. Uma InputMismatchException ocorre quando o método Scanner nextint recebe uma string que não representa um inteiro válido.

Como é feito o tratamento de erros? Através do comando try e suas cláusulas catch e finally. Combinações válidas: try{} catch{} try{} finally{} try{} catch{} finally{}

Combinações Inválidas (não compila) try{} catch{} finally{} try{} finally{} catch{}

Incluindo código em um bloco try Bloco try contém o código que pode lançar (throw) uma exceção. Ø Consiste na palavra- chave try seguida por um bloco de código entre chaves. Ø Se ocorrer uma exceção em algum ponto, o restante do código congdo no bloco try não será executado.

Capturando exceções Um bloco catch: Ø Captura, isto é, recebe e trata uma exceção. Ø Começa com a palavra- chave catch. Ø Parâmetro de exceção entre parênteses ü iden4fica o 4po de exceção e ü permite que o bloco catch interaja com o objeto da exceção capturada. Ø Bloco do código entre chaves que executa quando uma exceção do 4po adequado ocorre. Bloco catch correspondente Ø o 4po do parâmetro de exceção corresponde exatamente ao 4po de exceção lançado ou é uma superclasse dele. Exceção não- capturada Ø uma exceção que ocorre para a qual não há nenhum bloco catch correspondente. ü Faz com que o programa termine se o programa 4ver somente um thread; ü do contrário apenas o thread atual é terminado e pode haver efeitos adversos no restante do programa.

Tratamento de Exceções Devemos inserir dentro do bloco do TRY as instruções que queremos monitorar para evitar as execeções. Ø TRY - CATCH Exemplo: Ø Programa que captura um número inteiro do teclado para dividir por 1.000.

Tratamento de Exceções import java.io.*; public class Exemplo6 { public static void main(string[] arg) throws IOException { InputStreamReader leitor = new InputStreamReader(System.in); BufferedReader teclado = new BufferedReader(leitor); System.out.print("Digite um numero: "); try { int num = Integer.parseInt(teclado.readLine()); int quoc = 1000 / num; System.out.println("1000/" + num + " = " + quoc); } catch (ArithmeticException e) { System.out.println("nada a calcular"); } catch (NumberFormatException e) { System.out.println("foi digitado um valor não inteiro"); } } } System.out.println("fim de programa");

try finally O comando try pode ter apenas uma cláusula- finally, e se houver deve ser a sua úlgma cláusula. Ela só faz diferença nas situações em que o processamento é interrompido pela ocorrência de erros não- tratados por nenhuma cláusula- catch. Exemplo: Programa que divide dois números digitados pelo usuário

Bloco finally Programas que obtêm certos recursos devem retorna - los ao sistema explicitamente para evitar vazamentos de recursos. Bloco finally: Ø Consiste na palavra- chave finally seguida por um bloco do código entre chaves. Ø Opcional em uma instrução try. Ø Se presente, é colocado depois do úl4mo bloco catch. Ø Executa se uma exceção for lançada no bloco try correspondente ou qualquer um dos seus blocos catch correspondentes. Ø Não executara se a aplicação encerrar prematuramente em um bloco try via o método System.exit. Ø Em geral, contém código de liberação de recursos.

Bloco finally (Continuação) Se nenhuma exceção ocorrer, os blocos catch são pulados e o controle prossegue para o bloco finally. Depois de o bloco finally executar, o controle prossegue para a primeira instrução depois do bloco finally. Se ocorrer uma exceção no bloco try, o programa pula o restante do bloco try. A primeira correspondência no bloco catch é executada e o controle prossegue para o bloco finally. Ø Se ocorrer uma exceção e não houver nenhum bloco catch correspondente, o controle prossegue para o bloco finally. Ø Depois de o bloco finally executar, o programa passa a exceção para o próximo bloco try externo. Se um bloco catch lançar uma exceção, o bloco finally ainda executara.

import java.io.*; public class Exemplo { public static void main(string[] args) { int num = 0, den = 0; InputStreamReader leitor = new InputStreamReader(System.in); BufferedReader teclado = new BufferedReader(leitor); System.out.println("Digite dois números seguidos da tecla ENTER:"); } } try { num = Integer.parseInt (teclado.readline()); den = Integer.parseInt(teclado.readLine()); System.out.println (num + / + den + " = + (num/den)); } catch (NumberFormatException e){ System.out.println ("Erro de formato."); } catch (IOException e) { System.out.println ("Erro de E/S."); } finally { System.out.println("Saindo do Bloco \"Try\".");} System.out.println("Fim do programa"); }

Modelo de terminação de tratamento de exceções Quando uma exceção ocorre: Ø O bloco try termina imediatamente. Ø O programa transfere o controle para o primeiro bloco catch correspondente. Depois de a exceção ser tratada: Ø O controle do programa não retorna ao ponto de lançamento porque o bloco catch terminou; o fluxo de controle prossegue para a primeira instrução depois do úl4mo bloco catch. Ø Outras linguagens tratam da seguinte forma: ü O controle do programa é retomado logo depois do ponto de lançamento.

Utilizando a cláusula throws Cláusula throws especifica as exceções que um método pode lançar. Ø Aparece depois da lista de parâmetros do método e antes do corpo do método. Ø Contém uma lista separada por vírgulas das exceções. Ø As exceções podem ser lançadas pelas instruções no corpo do método ou pelos métodos chamados no corpo do método. Ø As exceções podem ser dos 4pos listados na cláusula throws ou subclasses.

Lançando exceções com a instrução throw Instrução throw uglizada para lançar exceções. Os próprios programadores podem lançar exceções a pargr de um método se algo der errado. A instrução throw consiste na palavra- chave throw seguida pelo objeto de exceção.

printstacktrace, getstacktrace e getmessage Os métodos na classe Throwable recuperam informações adicionais sobre uma exceção. Ø printstacktrace ü envia a saída do rastreamento de pilha para o fluxo de erros padrão. Ø getstacktrace ü Recupera informações do rastreamento de pilha como um array de objetos. ü StackTraceElement; permite processamento personalizado das informações sobre a exceção. Ø getmessage ü retorna a string descri4va armazenada em uma exceção.

printstacktrace, getstacktrace e getmessage Métodos StackTraceElement: Ø getclassname Ø getfilename Ø getlinenumber Ø getmethodname As informações sobre o rastreamento de pilha seguem o padrão nomedaclasse.nomedométodo(nomedoarquivo: númerodalinha)

Quando utilizar o tratamento de exceções O tratamento de exceções foi concebido para processar erros síncronos. Ø Erros síncronos ü ocorrem quando uma instrução executa. Ø Erros assíncronos ü ocorrem em paralelo e independente do fluxo de controle do programa.

Exceções encadeadas Exceções encadeadas permitem a um objeto de exceção manter informações completas sobre o rastreamento de pilha quando uma exceção é lançada a pargr de um bloco catch. Os usuários podem recuperar as informações sobre uma exceção original. O rastreamento de pilha proveniente de uma exceção encadeada exibe quantas exceções encadeadas restam

Dicas de engenharia de software Incorpore sua estratégia de tratamento de exceções no sistema desde o princípio do processo de projeto. Pode ser di_cil incluir um tratamento de exceções eficiente depois que um sistema foi implementado.

Hierarquia de exceção em Java Todas as exceções são herdadas direta ou indiretamente da classe ExcepGon. Ø As classes Exception formam uma hierarquia de herança que pode ser estendida. Ø Classe Throwable, superclasse da Exception: ü Somente objetos Throwable podem ser u4lizados com o mecanismo de tratamento de exceções. ü Tem duas subclasses: Exception e Error. A classe ExcepGon e suas subclasses representam situações excepcionais que podem ocorrer em um programa Java e que podem ser capturadas pelo aplicagvo. A classe Error e suas subclasses representam situações anormais que poderiam acontecer na JVM normalmente não é possível que um programa se recupere de Errors.

Como os erros são caracterizados (indicados)? Os erros são idengficados por objeto de classes específicas durante a execução dos programas. Existem dois Gpos de classes: Ø Classe Error ü Erros Estruturais, como mau funcionamento da máquina virtual Ø Classe ExcepGon ü Erros que podem ser tratados dentro do projeto, que servem de superclasses para as demais. Ambas são subclasses da classe Throwable

Árvore de Exceções e Erros

Hierarquia de heranças de Throwable

Classes de Erro e Exceção

Tipos comuns de erros de execução? Problema Índice de uma lista (Array) fora do intervalo permi4do. Problemas em operações aritmé4cas, tais como: Divisões por zero. Uso de referência que são a ponta para nenhum objeto. Classe que iden4fica o 4po de erro IndexOutOeoundsExcep4on Arithme4cExcep4on IOExcep4on

Hierarquia de exceções do Java Duas categorias de exceções: verificadas e não- verificadas. Exceções verificadas: Ø As exceções que são herdadas da classe Exception, mas não de RuntimeException. Ø O compilador impõe um requisito do Gpo capturar ou declarar. Ø O compilador verifica cada chamada de método e declaração de método para determinar se o método lança (throws) exceções verificadas. ü Se lançar, o compilador assegura que a exceção verificada é capturada ou declarada em uma cláusula throws. ü Se não capturada nem declarada, ocorre um erro de compilador.

Hierarquia de exceções do Java Duas categorias de exceções: verificadas e não- verificadas. Exceções não- verificadas: Ø Herdam da classe RuntimeException ou da classe Error. Ø O compilador não verifica o código para ver se a exceção foi capturada ou declarada. Ø Se uma exceção não- verificada ocorrer e não 4ver sido capturada, o programa terminara ou executara com resultados inesperados. Ø Em geral, podem ser evitadas com uma codificação adequada.

Hierarquia de exceções do Java O bloco catch captura todas as exceções do seu 4po e das subclasses do seu Gpo. Se houver múl4plos blocos catch que correspondam a um 4po par4cular de exceção, somente a primeiro bloco catch correspondente executa. Faz sen4do u4lizar um bloco catch de uma superclasse quando todos os blocos catch para as subclasses dessa classe realizarem a mesma funcionalidade.

Declarando novos tipos de exceção Você pode declarar suas próprias classes de exceção específicas dos problemas que podem ocorrer quando um outro programa ugliza suas classes reuglizáveis. A nova classe de exceção deve estender uma classe de exceção existente. Em geral, ela contém somente dois construtores: Ø Um não recebe nenhum argumento, passa mensagens de exceção padrão para o construtor da superclasse. Ø O outro recebe uma mensagem personalizada de exceção como uma string e a passa para o construtor da superclasse.