capítulo 6. exceções exceptions try / catch hierarquia de exceptions exceções verificadas ...

34
Exceções Capítulo 6

Upload: internet

Post on 22-Apr-2015

151 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

ExceçõesCapítulo 6

Page 2: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Exceções Exceptions try / catch Hierarquia de

Exceptions Exceções

verificadas Transferindo

exceções Cláusula throws

Cláusula finally Principais métodos

de exceções Principais

exceções Cláusula throw Exceções

personalizadas

2

Page 3: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Exceptions

Mecanismo utilizado pelo Java para informar que algo inesperado aconteceu

Quando sua aplicação não contorna situações de exceptions, ocorre a interrupção abrupta

3

Page 4: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

try / catch

try {

// Instruções sujeitas

// a falhas

} catch (Exception e) {

// Instruções a serem executadas

// em caso de falha

}

4

Page 5: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

try / catch – Exemplo

try {

Conexao cn = abrirConexao();

cn.gravarRegistro(aluno1);

} catch (Exception e) {

System.out.println(“Erro ao gravar”);

System.out.println(e.getMessage());

}

5

Page 6: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Hierarquia de Exceptions

try {Conexao cn = abrirConexao();Aluno aluno1 = cn.obterDados();cn.gravarNoArquivo(aluno1);

} catch (SQLException sqle) {System.out.println(“Erro ao acessar banco de dados”);

} catch (IOException ioe) {System.out.println(“Erro ao gravar no arquivo”);

} catch (Exception e) {System.out.println(“Erro inesperado”);

}

6

Page 7: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Hierarquia de Exceptions

Throwable

ErrorException

SQLException

IOException

ParseException

RuntimeException

ArrayIndexOutOfBoundsException

ArithmeticException

NumberFormatException

NullPointerException

7

Page 8: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Exceções verificadas

FileReader texto;...

texto = new FileReader(“C:\\arquivos\\carta.txt”);

A instrução acima oferece risco de utilização (FileNotFoundException) e deve possuir tratamento de erro.

Não é permitido semTratamento de erro

8

Page 9: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Exceções verificadas

FileReader texto;...try {

texto = new FileReader(“C:\\arquivos\\carta.txt”);} catch (FileNotFoundException e) {

System.out.println(“Arquivo não encontrado”);}

9

Page 10: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Throwable

ErrorException

SQLException

IOException

ParseException

RuntimeException

ArrayIndexOutOfBoundsException

ArithmeticException

NumberFormatException

NullPointerException

Exceções verificadas

10

Page 11: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Transferindo exceções

Ao utilizar instruções que exigem o tratamento de exceptions, temos duas opções:

Tratar a exception com try / catch, conforme já visto

Transferir a exception para quem chamou o método atual através da cláusula throws

11

Page 12: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Transferindo exceções

Cláusula throws

void abrirArquivo() throws FileNotFountException {

FileReader texto;...texto = new FileReader(“C:\\arquivos\\

carta.txt”);...

}

12

Page 13: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Cláusula finally Bloco de código associado ao try/catch

que garante a execução de instruções mesmo quando não ocorre exceções

Define um bloco de código que será executado 100% das vezes

Geralmente utilizado para finalizar alguma pendência que o método deixou

13

Page 14: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Cláusula finallypublic double obterSaldo() throws IOException {

Conexao cn = null;try {

cn = abrirConexao();Conta c1 = cn.obterConta();double saldo = c1.getSaldo();cn.gravarNoArquivo(saldo);return saldo;

} catch (SQLException sqle) {System.out.println("Erro ao

acessar BD");} catch (RuntimeException e) {

System.out.println("Erro inesperado");

} finally {fecharConexao(cn);

}}

14

Page 15: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Principais métodos de exceções

getMessage()Retorna uma mensagem a respeito do

problema que provocou a exception.

try {

...

} catch (Exception e) {

System.out.println(“Ocorreu um problema: ” +

e.getMessage());

}

15

Page 16: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Principais métodos de exceções

printStackTrace()Exibe em console a pilha de chamadas de

métodos desde o método main até o momento em que a exception ocorreu.

try {

...

} catch (Exception e) {

e.printStackTrace();

}

16

Page 17: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Principais exceções java.lang.NullPointerException java.lang.NumberFormatException java.lang.ArrayIndexOutOfBoundsException java.lang.ArithmeticException java.lang.ClassCastException java.io.IOException java.sql.SQLException

17

Page 18: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Principais exceções

NullPointerException

Exceção não verificada pertencente ao pacote java.lang

Ocorre ao tentar executar um método sobre uma variável que não possui um objeto referenciado

Cliente c = null;c.setNome(“Manuel da silva”);

18

Page 19: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Principais exceções

NumberFormatException

Exceção não verificada pertencente ao pacote java.lang

Ocorre ao tentar realizar a conversão de um String para um valor numérico

String texto = “10xpt23”;int idade = Integer.parseInt(texto);

19

Page 20: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Principais exceções

ArrayIndexOutOfBoundsException

Exceção não verificada pertencente ao pacote java.lang

Ocorre ao tentar obter um item inexistente em um array

double[] salario = { 1200.5, 630.0, 950.15 };double s = salario[3];

20

Page 21: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Principais exceções

ArithmeticException

Exceção não verificada pertencente ao pacote java.lang

Ocorre em operações aritméticas com inteiros que possuem resultado inválido

int valorTotal = 25;int quantidadePessoas = 0;int rateio = valorTotal / quantidadePessoas;

21

Page 22: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Principais exceções

ClassCastException

Exceção não verificada pertencente ao pacote java.lang

Ocorre ao tentar realizar o cast (tipagem) para um tipo incompatível com o objeto

Conta c = new ContaPoupanca();ContaCorrente cc = (ContaCorrente) c;

22

Page 23: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Principais exceções

IOException Exceção verificada pertencente ao pacote java.io (será

visto no capítulo 10)

Ocorre em operações de input/output, como leitura de arquivos, comunicação por rede que não são realizados com sucesso.

Possui diversas classes filhas que representam subtipos de problemas do gênero I/O

FileReader doc;doc = new FileReader(“C:\\carta.txt”);

23

Page 24: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Principais exceções

SQLException Exceção verificada pertencente ao pacote java.sql (será visto

no capítulo 11)

Ocorre ao tentar realizar operações de acesso a bancos de dados que resultam em problemas, tais como:

○ Tentar acessar um banco de dados que não está no ar;

○ Tentar conectar com usuário ou senha inválidos;

○ Tentar acessar uma tabela inexistente.

rs = st.executeUpdate(“SELECT nome, salario FROM tab_funcionario”);

24

Page 25: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Cláusula throw

Força a ocorrência de uma exception sinalizando que há algum problema ao executar a operação em questão.

25

Page 26: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Cláusula throw

Exemplo

public void exibeParabens(int idade) throws Exception {if (idade >= 0) {

System.out.println(“Parabens pelos seus ” +

idade + “ anos de vida.”);} else {

throw new Exception(“Idade inválida”);}

}

26

Page 27: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Cláusula throw Na aplicação principal...

public void rotinaPrincial() {Conexao cn = null;try {

cn = abrirConexao();Cliente cli = cn.obterCliente();int idade = cli.getIdade();exibeParabens(idade);

} catch (SQLException sqle) {System.out.println(“Erro ao acessar BD”);

} catch (Exception e) {System.out.println(“Ocorreu um erro: ” +

e.getMessage());} finally {

fecharConexao(cn);}

} 27

Page 28: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Exceções personalizadas

Na maioria das ocasiões, ao implementar métodos que geram exceptions, é recomendável criar a sua própria exceção.

Isto permite que a aplicação principal utilize blocos catch específicos para a exception em questão

28

Page 29: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Exceções personalizadas

Exemplo

public void debitar(double valor) throwsSaldoInsuficienteException {

if (valor <= this.saldo) {this.saldo -= valor;

} else {throw new SaldoInsuficienteException(

“Valor muito alto para debitar: ” + valor);

}}

29

Esta classe precisaser criada

Page 30: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Exceções personalizadas

Criando a classe exceção

public class SaldoInsuficienteException extends Exception {

public SaldoInsuficienteException() {super();

}

public SaldoInsuficienteException(String message) {super(message);

}}

30

Page 31: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Exceções personalizadas Na aplicação principal...

public void obterSaldo() {Conexao cn = null;try {

cn = abrirConexao();Conta conta = cn.obterConta();conta.debitar(valorBoleto);

} catch (SQLException sqle) {System.out.println(“Erro ao acessar BD”);

} catch (SaldoInsuficienteException e) {System.out.println(“Ocorreu um erro: ” +

e.getMessage());} catch (Exception e) {

System.out.println(“Ocorreu um erro desconhecido.”);

} finally {fecharConexao(cn);

}} 31

Page 32: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Exercício 1 Crie uma classe executável ExercicioIdade que

realize as seguintes operações:

Através da classe Scanner, método nextLine() Solicite ao usuário que digite o ano de seu nascimento;

Calcule e exiba sua idade assumindo que estamos no ano 2012;

Caso ocorra algum problema na conversão do valor digitado pelo usuário, exiba a mensagem “Valor digitado inválido”. Utilize para isto o tratamento sobre a exception NumberFormatException.

32

Page 33: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Exercício 2 As linhas de código abaixo são utilizadas para

gravar um texto dentro de um novo arquivo no sistema operacional:

PrintWriter writer = new PrintWriter(“C:\\doc1.txt”);writer.println(texto);writer.close();

onde texto é uma variável String qualquer contendo algum texto.

33

Page 34: Capítulo 6. Exceções  Exceptions  try / catch  Hierarquia de Exceptions  Exceções verificadas  Transferindo exceções  Cláusula throws  Cláusula

Exercício 2 (Fim) Crie uma classe executável ExercicioGravacao

que solicite que o usuário digite uma frase e grave-a em um arquivo conforme mostrado no slide anterior.

Caso ocorra algum problema durante a gravação, exiba a mensagem “Falha ao gravar as informações digitadas”.

34