Capítulo 6. Exceções Exceptions try / catch Hierarquia de Exceptions Exceções verificadas ...
Transcript of Capítulo 6. Exceções Exceptions try / catch Hierarquia de Exceptions Exceções verificadas ...
![Page 1: Capítulo 6. Exceções Exceptions try / catch Hierarquia de Exceptions Exceções verificadas Transferindo exceções Cláusula throws Cláusula.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/1.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/2.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/3.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/4.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/5.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/6.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/7.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/8.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/9.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/10.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/11.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/12.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/13.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/14.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/15.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/16.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/17.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/18.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/19.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/20.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/21.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/22.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/23.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/24.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/25.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/26.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/27.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/28.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/29.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/30.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/31.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/32.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/33.jpg)
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.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc17d497959413d8f1114/html5/thumbnails/34.jpg)
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