Upload
internet
View
174
Download
0
Embed Size (px)
Citation preview
ExceçõesCapítulo 6
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
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
try / catch
try {
// Instruções sujeitas
// a falhas
} catch (Exception e) {
// Instruções a serem executadas
// em caso de falha
}
4
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
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
Hierarquia de Exceptions
Throwable
ErrorException
SQLException
IOException
ParseException
RuntimeException
ArrayIndexOutOfBoundsException
ArithmeticException
NumberFormatException
NullPointerException
7
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
Exceções verificadas
FileReader texto;...try {
texto = new FileReader(“C:\\arquivos\\carta.txt”);} catch (FileNotFoundException e) {
System.out.println(“Arquivo não encontrado”);}
9
Throwable
ErrorException
SQLException
IOException
ParseException
RuntimeException
ArrayIndexOutOfBoundsException
ArithmeticException
NumberFormatException
NullPointerException
Exceções verificadas
10
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
Transferindo exceções
Cláusula throws
void abrirArquivo() throws FileNotFountException {
FileReader texto;...texto = new FileReader(“C:\\arquivos\\
carta.txt”);...
}
12
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Exceções personalizadas
Criando a classe exceção
public class SaldoInsuficienteException extends Exception {
public SaldoInsuficienteException() {super();
}
public SaldoInsuficienteException(String message) {super(message);
}}
30
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
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
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
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