• Nenhum resultado encontrado

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

N/A
N/A
Protected

Academic year: 2021

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

Copied!
58
0
0

Texto

(1)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Cap

Cap

í

í

tulo 10

tulo 10

Tratamento de Exce

(2)

Objetivos do Capítulo

 Apresentar o conceito de exceção e caracterizar as

situações sob as quais as exceções se manifestam.

 Indicar os mecanismos que podem ser empregados para a

captura e tratamento de exceções.

 Explorar a hierarquia de exceções composta pelas classes

da API do Java.

 Apontar o que caracteriza as

checked exceptions

e as

unchecked exceptions

e o que distingue estes dois grupos de

exceções.

(3)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Introdução

 Exceção: condição anormal

 Causas:

 Falhas na implementação  Falhas na operação

 O responsável

 Qualidade de software

 Tolerância à falhas

(4)

Introdução

 Código 10.1 – Excecao.java

 O aplicativo deve solicitar um número inteiro e exibir o seu cubo.  Utilize um diálogo gráfico para solicitar e exibir os dados.

 Execute o aplicativo e informe um dado que não possa ser convertido para o tipo int.

(5)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Estrutura try-catch

 Bloco try

 Delimita instruções que podem gerar exceções.  Um bloco catch para cada tipo de exceção.

(6)

Estrutura try-catch

 Sintaxe:

try {

<instruções>

}

catch (<tipo_da_exceção> <nome_da_exceção>) {

<tratamento>

}

catch (<tipo_da_exceção> <nome_da_exceção>) {

<tratamento>

(7)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Estrutura try-catch

 Tratamento genérico:

 Uso de tipo genérico: Exception

 Sintaxe:

try { <instruções> } catch (Exception ex) { <tratamento> }

(8)

Estrutura try-catch

 Código 10.2 – Try.java

 Captar dois números e dividir o primeiro pelo segundo.

 Utilizar diálogos gráficos para captar os números e exibir o resultado.

 Se ocorrer uma exceção durante a execução destas instruções, o programa deve exibir uma mensagem de erro e encerrar o

aplicativo.

 A mensagem de erro deve conter:

 O nome da classe que representa a exceção.  A mensagem de erro padrão desta exceção.

(9)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Estrutura try-catch

(10)

Estrutura try-catch

 Código 10.3 – TratamentoMultiplo.java

 Captar dois números e dividir o primeiro pelo segundo.

 Utilizar diálogos gráficos para captar os números e exibir o resultado.

 Se ocorrer uma exceção durante a execução destas instruções, o programa deve exibir uma mensagem de erro específica para cada tipo de exceção que pode ser disparada e deve encerrar o aplicativo.

 Exiba as seguintes mensagens de erro:

 Em caso de NumberFormatException: “Número inválido!”

(11)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Estrutura try-catch

(12)

Estrutura try-catch

 Código 10.4 – ValidaInteiro.java

 Solicitar um número inteiro e indicar se ele é válido.  Utilizar diálogos gráficos.

 Se o diálogo de entrada for cancelado, encerrar o aplicativo.

 Se o número não for válido, exibir mensagem de erro e solicitá-lo novamente.

 Regras para validação do número:

 Deve ser inteiro.

 Deve ser maior ou igual a 1.  Deve ser menor ou igual a 10.

 Exibir uma mensagem de erro específica para cada uma destas situações.

(13)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Estrutura try-catch

(14)

Bloco Finally

 Objetivo:

 Garantir a execução de determinadas instruções.

 Requisito:

 Vínculo com estrutura try-catch

 Sintaxe:

try {

<instruções>

}

catch (<tipo_da_exceção> <nome_da_exceção>) {

<tratamento>

}

finally {

(15)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Bloco Finally

 Código 10.5 – Finally.java

 Solicitar um número inteiro e indicar se ele é válido.  Utilizar diálogos gráficos.

 Se o diálogo de entrada for cancelado, encerrar o aplicativo.  Se o número não for válido, exibir mensagem de erro.

 Regras para validação do número:

 Deve ser inteiro.

 Deve ser igual ou superior a -2.147.483.648.  Deve ser igual ou inferior a 2.147.483.647.

 Instruções de finalização que devem ser garantidas:

 Mensagem de conclusão: “Operação encerrada!”.

(16)

Bloco Finally

(17)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

A Hierarquia das Exceções

 Uma exceção é uma classe

 Cada classe têm uma ancestral direta

(18)
(19)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Tratamento Obrigatório e Tratamento Opcional

 Primeiro grupo:

checked exceptions

 Tratamento obrigatório

 Classes que não derivam de RuntimeException  Condições inválidas

 Causas fora do controle do programador  Exemplos:

 Problemas físicos na rede  Queda do servidor de BD  Ausência de arquivos

(20)

Tratamento Obrigatório e Tratamento Opcional

 Segundo grupo:

unchecked exceptions

 Tratamento opcional

 Classe RuntimeException e suas descendentes  Defeitos no código do aplicativo (bugs)

 Podem ser evitadas pelo programador

 Adaptação da lógica de seu algoritmo

 Exemplos:

 Executar método de objeto nulo

 Acessar posição inexistente de vetor  Converter dado captado do usuário

 Há casos em que o programador não pode evitá-las

(21)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Tratamento de Checked Exceptions

 Código 10.6 – TratamentoObrigatorio.java

 Ler o arquivo Excecao.java e exibir seu conteúdo.

 Editar e compilar sem nenhum tratamento de exceção.  Analisar as mensagens de erro do compilador.

(22)

Tratamento de Checked Exceptions

(23)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Tratamento de Checked Exceptions

Código 10.6 – TratamentoObrigatorio.java. 1 import java.io.FileReader;

2 import java.io.BufferedReader; 3

4 public class TratamentoObrigatorio {

5 public static void main(String[] args) { 6 String texto = "";

7 FileReader fr = new FileReader("Excecao.java"); 8 BufferedReader br = new BufferedReader(fr);

9

10 while(true) {

11 String linha = br.readLine(); 12 if(linha == null) break;

13 texto += linha + "\n"; 14 } 15 16 br.close(); 17 fr.close(); 18 System.out.println(texto); 19 } 20 }

(24)

Tratamento de Checked Exceptions

Código 10.7 – TratamentoObrigatorio.java. 1 import java.io.FileReader; 2 import java.io.BufferedReader; 3 import java.io.FileNotFoundException; 4 import java.io.IOException; 5

6 public class TratamentoObrigatorio {

7 public static void main(String[] args) { 8 String texto = ""; 9 FileReader fr = null; 10 11 try { 12 fr = new FileReader("Excecao.java"); 13 }

14 catch (FileNotFoundException nfex) {

15 System.out.println("Arquivo não encontrado!"); 16 System.exit(0);

17 } 18

(25)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Tratamento de Checked Exceptions

Código 10.7 – TratamentoObrigatorio.java. 19 try {

20 BufferedReader br = new BufferedReader(fr); 21

22 while(true) {

23 String linha = br.readLine(); 24 if(linha == null) break;

25 texto += linha + "\n"; 26 } 27 28 br.close(); 29 fr.close(); 30 }

31 catch (IOException ioex) {

32 System.out.println("Erro durante a leitura do arquivo!"); 33 System.exit(0); 34 } 35 36 System.out.println(texto); 37 System.exit(0); 38 } 39 }

(26)

Tratamento para NullPointerException

 NullPointerException

 Descendente direta de RuntimeException  Uma

unchecked exception

 Causas comuns:

 Acessar ou modificar um atributo de um objeto nulo.  Executar um método de um objeto nulo.

 Acessar ou modificar um elemento de um vetor nulo.  Recuperar a quantidade de elementos de um vetor nulo.

(27)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Tratamento para NullPointerException

 Código 10.8 – TratamentoNull.java

 Solicitar o nome do usário.

 Converter seu nome para maiúsculo e exibi-lo.  Utilizar diálogos gráficos.

 Experimentar cancelar o diálogo de entrada sem ter previsto isso no algoritmo do aplicativo.

(28)

Tratamento para NullPointerException

(29)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Tratamento para NullPointerException

Código 10.8 – TratamentoNull.java. 1 import javax.swing.JOptionPane; 2

3 public class TratamentoNull {

4 public static void main(String[] args) {

5 String nome = JOptionPane.showInputDialog("Informe seu nome"); 6 nome = nome.toUpperCase();

7 JOptionPane.showMessageDialog(null,"Seu nome: " + nome); 8 System.exit(0);

9 } 10 }

(30)

Tratamento para NullPointerException

Código 10.9 – TratamentoNull.java. 1 import javax.swing.JOptionPane; 2

3 public class TratamentoNull {

4 public static void main(String[] args) {

5 String nome = JOptionPane.showInputDialog("Informe seu nome"); 6 if (nome == null) System.exit(0);

7 nome = nome.toUpperCase();

8 JOptionPane.showMessageDialog(null,"Seu nome: " + nome); 9 System.exit(0);

10 } 11 }

(31)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Tratamento para ArrayIndexOutOfBoundsException

 ArrayIndexOutOfBoundsException

 Descendente indireta de RuntimeException  Uma

unchecked exception

 Causas comuns:

 Acesso a elemento de vetor/matriz com índice ilegal.

 Exemplo:

int[ ] fibonacci = {1,1,2,3,5,8,13,21}; int n = fibonacci[8];

(32)

Tratamento para ArrayIndexOutOfBoundsException

 Código 10.10 – TratamentoArray.java

 Declare, instancie e inicialize um vetor de strings com o nome de quatro amigos.

 Implemente um laço que percorra este vetor e imprima o conteúdo de cada elemento.

(33)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Tratamento para ArrayIndexOutOfBoundsException

(34)

Tratamento para ArrayIndexOutOfBoundsException

Código 10.10 – TratamentoArray.java. 1 public class TratamentoArray {

2 public static void main(String[] args) {

3 String[] amigos = {"Cláudia","Vanessa","Raul","Sidnei"}; 4

5 for (byte num = 1; num <= amigos.length; num++)

6 System.out.println("Amigo " + num + ": " + amigos[num]); 7 }

(35)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Tratamento para ArrayIndexOutOfBoundsException

Código 10.11 – TratamentoArray.java. 1 public class TratamentoArray {

2 public static void main(String[] args) {

3 String[] amigos = {"Cláudia","Vanessa","Raul","Sidnei"}; 4

5 for (byte num = 0; num < amigos.length; num++)

6 System.out.println("Amigo " + (num + 1) + ": " + amigos[num]); 7 }

(36)

Tratamento para InputMismatchException

 InputMismatchException

 Descendente indireta de RuntimeException  Uma

unchecked exception

 Disparada por métodos da classe Scanner  Causas comuns:

 O termo recuperado não coincide com o padrão esperado.

 Exemplo:

 Método nextInt( ) invocado  Usuário digita: 55,33

(37)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Tratamento para InputMismatchException

 Código 10.12 – TratamentoInput.java

 Captar a idade do usuário.  Utilizar método nextByte( ).

 Experimente deixar sem tratamento de exceção.  Implemente um tratamento adequado.

(38)

Tratamento para InputMismatchException

Código 10.12 – TratamentoInput.java. 1 import java.util.Scanner;

2

3 public class TratamentoInput {

4 public static void main(String[] args) { 5 Scanner scan = new Scanner(System.in); 6

7 System.out.print("Informe sua idade:\t"); 8 byte idade = scan.nextByte();

9

10 System.out.println("Sua idade:\t\t" + idade); 11 }

(39)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Tratamento para InputMismatchException

Código 10.13 – TratamentoInput.java. 1 import java.util.Scanner;

2 import java.util.InputMismatchException; 3

4 public class TratamentoInput {

5 public static void main(String[] args) { 6 byte idade = -1;

7

8 while (idade < 0) {

9 System.out.print("\nInforme sua idade:\t"); 10 Scanner scan = new Scanner(System.in);

11

12 try {

13 idade = scan.nextByte(); 14 }

15 catch (InputMismatchException ime) {

16 System.out.println("Idade inválida!"); 17 }

18 } 19

20 System.out.println("Sua idade:\t\t" + idade); 21 }

(40)

Tratamento para Outras Exceções

 Tipo:

checked exceptions

 O compilador avisa

 Tratamento obrigatório com estrutura try-catch

 Tipo:

unchecked exceptions

 Causa sob área de domínio do programador

 Alterar algoritmo do programa  Não utilizar estrutura try-catch  Exemplos:

o NullPointerException

o ArrayIndexOutOfBoundsException o ArithmeticException

 Causa fora da área de domínio do programador

 Tratar com estrutura try-catch  Exemplos:

(41)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Exercício 1

 Crie um novo aplicativo, chamado Exercicio1001, que solicite

o nome e o salário do usuário e calcule o valor que a empresa

deve depositar em sua conta do FGTS (Fundo de Garantia por

Tempo de Serviço).

 Este aplicativo deve realizar toda interação com o usuário

através da janela de comando.

 Procure implementar este aplicativo de modo que sua

interação com o usuário se estabeleça exatamente como

você pode observar na figura do slide seguinte.

(42)
(43)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Exercício 1

 Se o nome informado não for válido, o aplicativo deve

imprimir uma mensagem de erro e solicitá-lo novamente.

 O nome deve conter de 5 a 50 caracteres.  O nome não pode conter números.

 Se o salário informado não for válido, o aplicativo deve

imprimir uma mensagem de erro e solicitá-lo novamente.

 O salário deve ser um número fracionário.

 O salário deve ser igual ou superior a R$ 465,00.

 Ao final, o aplicativo deve imprimir os dados que serão

registrados no recibo de pagamento do usuário:

 Seu nome.  Seu salário.

 O FGTS a ser depositado.

 O valor do FGTS deve ser calculado pelo aplicativo e

corresponde a 8% do salário.

(44)

Exercício 2

 Crie um novo aplicativo, chamado Exercicio1002, que solicite

um número inteiro e indique se ele é um número primo.

 Os números primos são números inteiros com apenas dois divisores: ele mesmo e o número um.

 O 17 é um exemplo de número primo porque só pode ser dividido por ele mesmo e por um.

 Este aplicativo deve realizar toda interação com o usuário

através da janela de comando. A figura do slide seguinte

ilustra como isto deve ser realizado.

 Procure implementar este aplicativo de modo que sua interação com o usuário se estabeleça exatamente como você pode

(45)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

(46)

Exercício 2

 O número informado deve ser maior que um e deve ser menor

ou igual a 2.147.483.647.

 Se o dado informado não for um número, deve-se exibir a seguinte mensagem de erro: “Erro: dado inválido!”.

 Se o número não for maior que um, deve-se exibir a seguinte mensagem de erro: “Erro: o número deve ser maior que 1!”.

 Este aplicativo deve permitir que seja analisada qualquer

quantidade de números.

 Depois que o usuário indicar um número e for indicado se ele é primo, o aplicativo deve solicitar outro número para repetir a operação.

 Este procedimento deve se repetir indefinidamente e o aplicativo só deve ser encerrado quando o usuário digitar “SAIR”.

(47)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Exercício 2

 Procure implementar o algoritmo deste aplicativo de modo

que ele realize esta tarefa no menor tempo possível.

 Propõe-se, como desafio, que você tente expandir o limite máximo que o usuário pode informar para

9.223.372.036.854.775.807.

 Tente otimizar o algoritmo para que ele seja capaz de analisar números tão grandes como este em um tempo plausível.

(48)

Exercício 3

 Crie um novo aplicativo, chamado Exercicio1003, que gere os

números que compõe a Seqüência de Fibonacci.

 Esta seqüência é uma função recursiva que objetiva gerar um conjunto de números inteiros.

 Os dois primeiros elementos desta seqüência são: {1,1}.

 O terceiro número e todos os demais números desta seqüência são definidos pela soma dos dois números anteriores.

 O terceiro número, portanto, será o dois (resultado da soma: 1 + 1), o quarto número será o três (resultado da soma: 2 + 1), o

quinto número será o cinco (resultado da soma: 3 + 2) e assim sucessivamente.

 A lista dos dez primeiros números desta seqüência são os seguintes: f(M=10) = {1,1,2,3,5,8,13,21,34,55}

(49)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Exercício 3

 Este aplicativo deve realizar toda interação com o usuário

através da janela de comando.

(50)

Exercício 3

 O aplicativo deverá solicitar ao usuário o a quantidade de

números que deverão ser gerados.

 O número informado deve ser maior ou igual a três.  O número deve ser menor ou igual a 92.

 Armazene a quantidade informada em uma variável do tipo byte.  Se o dado informado não for um número ou se for um número

superior à capacidade do tipo byte, o aplicativo deve produzir a seguinte mensagem de erro: “Erro: dado inválido!”.

 Se o número for menor que três ou maior que 92, o aplicativo deve produzir a seguinte mensagem de erro: “Erro: a quantidade deve estar entre 3 e 92!”.

(51)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Exercício 4

 Crie um novo aplicativo, chamado Exercicio1004, que solicite

um número inteiro e indique se ele é um número perfeito.

 Um número perfeito é um número inteiro para o qual a soma de todos os seus divisores positivos menores que ele é igual ao próprio número.

 O número seis é um exemplo de número perfeito porque a soma de seus divisores é igual a ele próprio: 1 + 2 + 3 = 6.

 Este aplicativo deve realizar toda interação com o usuário

através da janela de comando. A do slide seguinte ilustra

como isto deve ser realizado.

 Procure implementar este aplicativo de modo que sua interação com o usuário se estabeleça exatamente como você pode

(52)
(53)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Exercício 4

 O número informado deve ser maior que zero e deve ser

menor ou igual a 32.767.

 Se o dado informado não for um número ou se for um número superior a 32767, o aplicativo deve produzir a seguinte

mensagem de erro: “Erro: dado inválido!”.

 Se o número não for maior que zero, o aplicativo deve produzir a seguinte mensagem de erro: “Erro: o número deve ser maior que zero!”.

(54)

Exercício 5

 Crie um novo aplicativo, chamado Exercicio1005, que

permita o registro de dados coletados através de pesquisa de

campo junto a uma amostra de até 100 pessoas.

 Os dados coletados junto a cada pessoa são apenas três: seu nome, sua idade e seu estado civil.

 Este aplicativo deve realizar toda interação com o usuário

através de diálogos gráficos.

 A Figura do slide seguinte ilustra como isto deve ser realizado.  Procure implementar este aplicativo de modo que sua interação

com o usuário se estabeleça exatamente como você pode observar nesta figura.

(55)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

(56)

Exercício 5

 Armazene os nomes dos entrevistados em um vetor de string

 Utilize uma matriz do tipo byte para armazenar as idades e os

estados civis.

 Armazene o estado civil como um byte que represente o código de um dos seguintes caracteres: S, C, V, D, O.

 Eles representarão, respectivamente, os seguintes estados civis: solteiro(a), casado(a), viúvo(a), divorciado(a) e outros.

 Quando o usuário cancelar um dos diálogos de entrada, o

aplicativo deve considerar que os dados de todos os

entrevistados já foram registrados.

 Nesse caso, realizar os cálculos estatísticos sobre estes dados e exibir o relatório final através de um diálogo gráfico de saída.

 No relatório, devem constar as seguintes informações:

 Os dados de todas as pessoas entrevistadas.  A média de idade dos entrevistados.

(57)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Exercício 5

 Se um dado informado não for válido, o aplicativo deve emitir

uma mensagem de erro e solicitá-lo novamente.

 A validade dos dados será quebrada nas situações descritas

abaixo e as mensagens de erro que devem ser exibidas são

aquelas indicadas:

 Se o nome contém menos de 5 ou mais de 50 caracteres, exiba a mensagem de erro: “O nome deve conter de 5 a 50 caracteres!”.  Se o nome contiver dígitos numéricos, exiba a mensagem de

erro: “O nome não deve conter números!”.

 Se a idade não for um número inteiro ou se for um número inteiro superior a 127, exiba a mensagem de erro: “Dado inválido!”.

 Se a idade for menor que zero, exiba a mensagem de erro: “Não existe idade negativa!”.

 Se o estado civil informado não for um único caractere, exiba a mensagem de erro: “Informe um caractere!”.

 Se o estado civil informado não for um dos caracteres previstos (S, C, V, D e O), exiba a mensagem de erro: “Opção inválida!”.

(58)

Contato

Com o autor:

Rui Rossi dos Santos

E-mail: livros@ruirossi.pro.br

Web Site: http://www.ruirossi.pro.br

Com a editora:

Editora NovaTerra

Telefone: (21) 2218-5314

Referências

Documentos relacionados

Ali diz que, ao voltar, Jesus permanecerá nos ares enquanto somos levados ao Seu encontro: “Porquanto o Senhor mesmo, dada a Sua palavra de ordem, ouvida a voz do arcanjo, e ressoada

lhe o raciocínio, fazê-lo perceber as várias facetas de um problema, é ensiná-lo a con- siderar as coisas de outros pontos de vista, a levar em conta os argumentos alheios. A

Problema de Saúde Pública Aumento da prevalência da hipertensão entre crianças e adolescentes Monitoramento da PA na prática pediátrica Monitoramento e controle Estilo

Com relação à utilização dos meios comunicativos pelas crianças autistas observa-se que tanto as crianças autistas não verbais como as verbais fazem grande uso do meio gestual para

Inscrições na Biblioteca Municipal de Ourém ou através do n.º de tel. Organização: Município de Ourém, OurémViva e grupos de teatro de associações e escolas do

SINF0037 Gestão da Informação SINF0071 Sistemas Operacionais SINF0018 Sistemas Operacionais SINF0053 Banco de Dados I SINF0027 Banco de Dados SINF0054 Banco de Dados II

As empresas integrantes da categoria econômica, abrangidas pela presente Convenção Coletiva de Trabalho, recolherão a importância de R$.30,00 (trinta reais), por empregado, no mês

O resultado final não foi o que esperávamos, mas como trabalhamos bem o ganhar e o perder foi tranquilo quando trouxeram para nossa roda de conversa o Vencedor da Copa do