Tratamento de Exceções

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

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

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

O tratamento de erros em Java

Sintaxe Básica de Java Parte 2

Exceções. Profa. Patrícia A. Jaques Slides alterados por Leandro Tonietto Mar-12. quarta-feira, 21 de março de 12

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

JAVA. Tópicos Especiais de Programação Orientada a Objetos. sexta-feira, 28 de setembro de 12

Programação Orientada a Objetos SANTOS, Rafael (PLT)

Programação Orientada a Objetos

Notas de Aula 09: Tratamento de exceções

Tratamento de Exceções em Java

Tratamento de Exceções. Prof. Leonardo Barreto Campos 1

[Desenvolvimento OO com Java] Exceções e controle de erros

Atributos e Métodos Estáticos

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

9 Exceções. Desenvolvimento OO com Java. Vítor E. Silva Souza ~ vitorsouza

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

AULA TEÓRICA 3. Tema 4. Excepções Ø Tratamento de excepções

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Tratamento de Erros. Sérgio Luiz Ruivace Cerqueira

Mecanismo de exceções em Java

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

Programação Orientada a Objetos. Manipulação de Exceções

Tratamento de Erro e Javadoc. Professor: Norton T. Roman

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:

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

Capítulo 10. Tratamento de Exceções. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

terminar o programa; retornar um valor de erro indicando falha; retornar e ignorar o problema; chamar uma função para tratar o erro, etc...

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Exceções. SCC0504 Programação Orientada a Objetos. Luiz Eduardo Virgilio da Silva ICMC, USP

Caso 1 NetScanner Main

Programação Estruturada e Orientada a Objetos

Tratando exceções em Java


Aula 08 Estruturas de Condição. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

RESPOSTA: import java.util.arraylist; import java.util.list; class CarrinhoDeCompras2 { List<Produto> produtos;

Tipos de dados e comandos POO

Tratamento de Exceções

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Sistema Futebol - Java

Vetores Unimensionais

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

01. [Sebesta, 2000] Defina exceção, manipulador de exceções, levantamento de uma exceção, desativação de uma exceção e exceção incorporada.

Java Standard Edition (JSE)

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

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Prof. Rogério Rocha 1

Linguagem de Programação II Implementação

Programação Orientada a Objetos

Classes e Objetos. Sintaxe de classe em Java

Algoritmos I Aula 13 Linguagem de Programação Java

Conceitos Básicos da Programação OO

Transcrição:

Tratamento de Exceções Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira

Introdução Exceções São eventos que ocorrem durante a execução de um programa e quebram o fluxo normal de execução das instruções. Indicam a ocorrência de erros ou condições excepcionais no programa. Programação Orientada a Objeto - Márcio Bueno 2

public class Divide { public static void main (String args[]) { int dividendo = Integer.parseInt(args[0]); int divisor = Integer.parseInt(args[1]); divide(dividendo, divisor); Sem Tratamento de Exceções Exemplo 1: Erro em tempo de execução! ArithmeticException lançada! public static void divide(int dividendo, int divisor) { System.out.println( Divisão = + (dividendo/divisor)); Exception in thread main java.lang.arithmeticexception: by zero Programação Orientada a Objeto - Márcio Bueno 3

Sem Tratamento de Exceções Exemplo 2: Erro em tempo de execução! (ArrayIndexOutOfBoundsException) public class Divide { public static void main (String args[]) { int dividendo = Integer.parseInt(args[0]); int divisor = Integer.parseInt(args[1]); divide(dividendo, divisor); public static void divide(int dividendo, int divisor) { System.out.println( Divisão = + (dividendo/divisor)); Exception in thread main java.lang.arrayindexoutofboundsexception Programação Orientada a Objeto - Márcio Bueno 4

Tipos de Exceções Erros aritméticos; Estouro de limite de array; Entrada de dados inválidos; Erros na manipulação de arquivos; Erros na comunicação com bancos de dados; Falhas de comunicação entre programas distribuídos; Entre outros. Programação Orientada a Objeto - Márcio Bueno 5

Palavras Reservadas Em Java: try, catch e finally Define um bloco de tratamento de exceção. throws Declara que um método pode lançar uma exceção ou mais exceções. throw Lança uma exceção. Programação Orientada a Objeto - Márcio Bueno 6

Tratamento de Exceções Usando try, catch e finally Define um bloco de tratamento de exceção. try {... catch (Excecao1 e1) {... catch (Excecao2 e2) {... finally {... Programação Orientada a Objeto - Márcio Bueno 7

Tratamento de Exceções Usando try catch Exemplo 1: public class Divide { public static void main (String args[]) { int dividendo = Integer.parseInt(args[0]); int divisor = Integer.parseInt(args[1]); try { divide(dividendo, divisor); catch (ArithmeticException e) { System.out.println( Não pode dividir por zero! ); public static void divide(int dividendo, int divisor) { System.out.println( Divisão = + (dividendo/divisor)); Programação Orientada a Objeto - Márcio Bueno 8

public class Divide { public static void main (String args[]) { try { int dividendo = Integer.parseInt(args[0]); int divisor = Integer.parseInt(args[1]); divide(dividendo, divisor); catch (ArithmeticException e1) { System.out.println( Não pode dividir por zero! ); catch (ArrayIndexOutOfBoundsException e2) { System.out.println( Favor Informar dois números! ); public static void divide(int dividendo, int divisor) { System.out.println( Divisão = + (dividendo/divisor)); Tratamento de Exceções Usando try catch Exemplo 2: Programação Orientada a Objeto - Márcio Bueno 9

Usando try catch Exemplo 3: import javax.swing.joptionpane; public class Divide { public static void main (String args[]) { int dividendo, divisor; while(true){ try { dividendo = Integer.parseInt(JOptionPane.showInputDialog ("Digite o dividendo: ")); divisor = Integer.parseInt(JOptionPane.showInputDialog ("Digite o divisor: ")); divide(dividendo, divisor); break; catch (ArithmeticException e1) { JOptionPane.showMessageDialog(null, "Não pode dividir por zero!"); catch (NumberFormatException e2) { JOptionPane.showMessageDialog(null, "Favor informar apenas números inteiros!"); /* Método divide aqui */ 10

Tratamento de Exceções public class OperacoesMatematicas { public static void main (String args[ ]) { System.out.println( Início do Programa. ); try { int a= Integer.parseInt(JOptionPane.showInputDialog( a: )); int b= Integer.parseInt(JOptionPane.showInputDialog( b: )); System.out.println( Divisão = + (a / b)); System.out.println( Multiplicação = + (a * b)); System.out.println( Soma = + (a + b)); System.out.println( Subtração = + (a - b)); catch (ArithmeticException e1) { System.out.println( Não pode dividir por zero! ); catch (NumberFormatException e2) { System.out.println( Digite um número válido! ); System.out.println( Fim do Programa. ); Usando try catch Exemplo 4: Programação Orientada a Objeto - Márcio Bueno 11

Tratamento de Exceções Usando throws Declara que um método pode lançar uma ou mais exceções. Um método Java pode lançar uma exceção se encontrar uma situação com a qual ele não possa lidar; Um método deve informar ao compilador os parâmetros que ele recebe, o valor que ele retorna e também o que pode acontecer de errado usando throws. Programação Orientada a Objeto - Márcio Bueno 12

Tratamento de Exceções Usando throws Sintaxe: public void metodo( ) throws Excecao {... public void metodo( ) throws Excecao1, Excecao2 {... Programação Orientada a Objeto - Márcio Bueno 13

Tratamento de Exceções Usando throws Exemplo1: import java.io.filewriter; public class GravaArquivo { public static void grava(string texto) { FileWriter fw = new FileWriter("teste.txt"); fw.write(texto); fw.close( ); Programação Orientada a Objeto - Márcio Bueno 14

Tratamento de Exceções Usando throws Exemplo 1 (Cont.): O trecho de código anterior irá causar um erro de compilação. O compilador exige que se declare a exceção IOException na cláusula throws do método ou que a mesma seja tratada dentro do método! Programação Orientada a Objeto - Márcio Bueno 15

import java.io.filewriter; public class GravaArquivo { public static void grava(string texto) throws IOException { FileWriter fw = new FileWriter( teste.txt ); fw.write(texto); fw.close( ); Tratamento de Exceções Usando throws Exemplo 1 (Cont.): Programação Orientada a Objeto - Márcio Bueno 16

import java.io.filewriter; import java.io.ioexception; public class GravaArquivo { public static void main(string args[]) { try { grava(args[0]); catch (IOException e) { System.out.println( Erro ao gravar arquivo! ); Tratamento de Exceções Usando throws Exemplo 1 (Cont.): Mais alguma exceção deveria ser tratada nesse código? System.out.println(e); // Imprime detalhadamente a Exceção. e.printstacktrace( ); // Imprime detalhadamente a Exceção. Programação Orientada a Objeto - Márcio Bueno 17

Usando throws Exemplo 1 (Cont.): import java.io.filewriter; import java.io.ioexception; public class GravaArquivo { public static void grava(string texto) throws IOException{ FileWriter fw = new FileWriter("teste.txt"); fw.write(texto); fw.close( ); public static void main(string args[]) { try { grava(args[0]); catch(ioexception e) { System.out.println("Erro ao gravar arquivo!"); System.out.println(e); // Imprime detalhadamente a Exceção. e.printstacktrace( ); // Imprime detalhadamente a Exceção. catch(arrayindexoutofboundsexception e){ System.out.println( Você deve digitar algo para gravar no arquivo!"); System.out.println(e); // Imprime detalhadamente a Exceção. e.printstacktrace( ); // Imprime detalhadamente a Exceção. Programação Orientada a Objeto - Márcio Bueno 18

Tratamento de Exceções Usando throws Exemplo 1 (Cont.): No código anterior, caso não haja argumentos: Você deve digitar algo para gravar no arquivo! java.lang.arrayindexoutofboundsexception: 0 java.lang.arrayindexoutofboundsexception: 0 at GravaArquivo.main(GravaArquivo.java:11) Programação Orientada a Objeto - Márcio Bueno 19

Tratamento de Exceções Usando finally O trecho de código colocado dentro da cláusula finally sempre será executado, independente do código que pode lançar exceção executar com sucesso ou com erro. Programação Orientada a Objeto - Márcio Bueno 20

Usando finally Exemplo: import java.io.filewriter; import java.io.ioexception; public class GravaArquivo2 { public static void main(string args[ ]) { FileWriter fw = null; try { fw = new FileWriter( teste.txt ); fw.write(args[0]); catch (IOException e) { System.out.println( Erro ao gravar arquivo! ); System.out.println(e); // Imprime detalhes da Exceção. finally { try{ fw.close(); catch(ioexception e){ System.out.println("Erro ao fechar arquivo!"); System.out.println(e); // Imprime detalhes da Exceção. Programação Orientada a Objeto - Márcio Bueno 21

Lançando e tratando Exceções pela Superclasse Exemplo 1: Excecao1 e Excecao2 são subclasses de Excecao! Excecao Excecao1 Excecao2 Programação Orientada a Objeto - Márcio Bueno 22

Lançando e tratando Exceções pela Superclasse Exemplo 1 (Cont.): As exceções declaradas com throws podem ser superclasses das exceções que são realmente lançadas: public void metodo throws Excecao1, Excecao2 {... public void metodo throws Excecao {... Programação Orientada a Objeto - Márcio Bueno 23

Lançando e tratando Exceções pela Superclasse Exemplo 2: Tratando pelas subclasses public class Divide { public static void main (String args[]) { try { int dividendo = Integer.parseInt(args[0]); int divisor = Integer.parseInt(args[1]); divide(dividendo, divisor); catch (ArithmeticException e1) { System.out.println( Não pode dividir por zero! ); catch (ArrayIndexOutOfBoundsException e2) { System.out.println( Favor Informar dois números! ); public static void divide(int dividendo, int divisor) { System.out.println( Divisão = + (dividendo/divisor)); Programação Orientada a Objeto - Márcio Bueno 24

Lançando e tratando Exceções pela Superclasse Exemplo 2: Tratando pela superclasse ArithmeticException e ArrayIndexOutOfBoundsException são subclasses de Exception! Exception RuntimeException ArithmeticException ArrayIndexOutOfBoundsException Programação Orientada a Objeto - Márcio Bueno 25

Lançando e tratando Exceções pela Superclasse Exemplo 2: Tratando pela superclasse public class Divide { public static void main (String args[]) { try { int dividendo = Integer.parseInt(args[0]); int divisor = Integer.parseInt(args[1]); divide(dividendo, divisor); catch (Exception e) { System.out.println( Erro ao executar programa! ); public static void divide(int dividendo, int divisor) { System.out.println( Divisão = + (dividendo/divisor)); Programação Orientada a Objeto - Márcio Bueno 26

Hierarquia de Exceções Java Throwable Error Exception RuntimeException OBSERVAÇÃO: O compilador não exige que se declare ou trate exceções de qualquer subclasse de Error ou de RuntimeException. Programação Orientada a Objeto - Márcio Bueno 27

Tratamento de Exceções Usando throw Palavra reservada utilizada para lançar uma exceção. Exemplo 1: // Instanciando e lançando o objeto Exception throw new Exception( Mensagem de ERRO! ); Exemplo 2: // Instanciação do objeto Exception Exception e = new Exception( Mensagem de ERRO! ); // Lançando a exceção throw e; Programação Orientada a Objeto - Márcio Bueno 28

Definindo suas Próprias Exceções Um programa pode ter um problema que não esteja descrito adequadamente em nenhuma das classes de exceções Criar sua própria exceção como uma subclasse da classe Exception Exemplo: public class ExcecaoTextoInvalido extends Exception { public ExcecaoTextoInvalido(String mensagem) { super(mensagem); Programação Orientada a Objeto - Márcio Bueno 29

Definindo suas Próprias Exceções Exemplo (cont.): public static void grava(string texto) throws IOException, ExcecaoTextoInvalido { FileWriter fw = null; if (texto == null texto.trim( ).equals("")) { throw new ExcecaoTextoInvalido("Texto inválido: " + texto); else { fw = new FileWriter("teste.txt"); fw.write(texto); Programação Orientada a Objeto - Márcio Bueno 30

Definindo suas Próprias Exceções Exemplo (cont.): public static void main(string[ ] args) { String texto = JOptionPane.showInputDialog("Digite um texto:"); try { grava(texto); catch (IOException e) { e.printstacktrace(); catch (ExcecaoTextoInvalido e) { System.out.println(e.getMessage()); Programação Orientada a Objeto - Márcio Bueno 31

Exercícios Exercício 1: Implementar a exceção ExcecaoDivisaoPorZero. Esta exceção será lançada pelo método double calcula(double a, double b) da classe Divisao. Implementar também a aplicação AplicacaoDivisao que recebe dois números informados pelo usuário e faz a divisão do primeiro pelo segundo usando uma chamada ao método calcula da classe Divisao. Programação Orientada a Objeto - Márcio Bueno 32

Exercícios Exercício 2: Implementar o tratamento de exceções para o Cadastro de Contas. Os métodos set das classes básicas de negócio lançarão exceções do tipo ExcecaoDadoInvalido quando o dado passado como parâmetro não for válido. O método inserir da classe CadastroContas deve lançar a exceção ExcecaoRepositorio quando não puder mais inserir contas no array e a exceção ExcecaoElementoJaExistente quando uma conta com um mesmo número já estiver cadastrada. O método buscar da classe CadastroContas deve lançar a exceção ExcecaoElementoInexistente quando a conta que se deseja buscar não estiver cadastrada. Programação Orientada a Objeto - Márcio Bueno 33