Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos...
Transcript of Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos...
![Page 1: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/1.jpg)
Tratamento de Exceções e I/O de Arquivos
Programação Orientada a Objetos Java
Prof. Anselmo Cardoso Paiva
Prof. Geraldo Braz Junior
![Page 2: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/2.jpg)
Principais conceitos
Programação defensiva
Antecipar o que pode sair errado
Lançamento e tratamento de exceções
Informe de erro
Processamento de arquivos simples
2
![Page 3: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/3.jpg)
Algumas causas dassituações de erros
Implementação incorreta Não atende à especificação
Solicitação de objeto inapropriado Por exemplo, índice inválido
Estado do objeto inconsistente ou inadequado Por exemplo, devido à extensão de uma
classe
3
![Page 4: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/4.jpg)
Nem sempre erro do programador
Erros surgem freqüentemente do ambiente: URL incorreto inserido
interrupção da rede
Processamento de arquivos é particularmente propenso a erros: arquivos ausentes
falta de permissões apropriadas
disco cheio
4
![Page 5: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/5.jpg)
Programação defensiva Interação cliente-servidor:
Um servidor deve assumir que os clientes são bem-comportados?
Ou ele deve assumir que os clientes são potencialmente hostis?
Diferenças significativas na implementação são requeridas
5
![Page 6: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/6.jpg)
Questões a serem resolvidas Qual é o número de verificações por um
servidor nas chamadas de método?
Como informar erros?
Como um cliente pode antecipar uma falha?
Como um cliente deve lidar com uma falha?
6
![Page 7: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/7.jpg)
Um exemplo
Crie um objeto AddressBook
Tente remover uma entrada
Resulta em um erro em tempo de execução
De quem é a ‘falha’?
Antecipação e prevenção de erros são preferíveis a apontar um culpado
7
![Page 8: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/8.jpg)
Valores dos argumentos Argumentos representam uma séria
‘vulnerabilidade’ para um objeto servidor Argumentos do construtor inicializam o
estado do objeto
Argumentos do método alteram freqüentemente o comportamento do objeto
Verificação de argumento é uma das medidas defensivas que p0dem ser tomadas pelo programa
8
![Page 9: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/9.jpg)
Verificando a chave
public void removeDetails(String key)
{
if(keyInUse(key)) {
ContactDetails details =
(ContactDetails) book.get(key);
book.remove(details.getName());
book.remove(details.getPhone());
numberOfEntries--;
}
}
9
![Page 10: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/10.jpg)
Informe de erro do servidor
Como informar argumentos inválidos?
No usuário? Há usuários humanos?
Eles podem resolver o problema?
No objeto cliente? Retorna um código de erro/status (típico de
programação estruturada)
Lança uma exceção – Java/OO
10
![Page 11: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/11.jpg)
Retornando um diagnóstico
boolean public removeDetails(key String)
{
if(keyInUse(key)) {
ContactDetails details =
(ContactDetails) book.get(key);
book.remove(details.getName());
book.remove(details.getPhone());
numberOfEntries--;
return true;
}
else {
return false;
}
}
11
![Page 12: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/12.jpg)
Respostas do cliente
Testar o valor de retorno Tente recuperar do erro
Evite a falha do programa
Ignorar o valor de retorno Não há como evitar
Possibilidade de levar a uma falha do programa
Exceções são preferíveis
12
![Page 13: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/13.jpg)
Princípios do lançamento de exceções
Um recurso especial de linguagem
Nenhum valor de retorno ‘especial’ necessário
Erros não podem ser ignorados no cliente O fluxo normal de controle é interrompido
Ações específicas de recuperação são encorajadas
13
![Page 14: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/14.jpg)
Lançando uma exceção (1)
/**
* Pesquisa um nome ou um número de telefone e retorna
* os detalhes do contato correspondentes.
* @param key O nome ou número a ser pesquisado.
* @return Os detalhes correspondentes à chave,ou null
* se não houver nenhuma correspondência.
* @throws NullPointerException se a chave for null.
*/
public void getDetails(String key)
{
if(key == null){
throw new NullPointerException(
“chave nula em getDetails");
}
return (ContactDetails) book.get(key);
}14
![Page 15: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/15.jpg)
Lançando uma exceção (2) Um objeto de exceção é construído: new ExceptionType("...");
O objeto exceção é lançado: throw ...
Documentação Javadoc: @throws ExceptionType reason
15
![Page 16: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/16.jpg)
A hierarquia de classes de exceção
classes da biblioteca-padrão
classes definidas pelo
usuário
16
![Page 17: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/17.jpg)
Categorias de exceção
Exceções verificadas: subclasse de Exception
utilizadas para falhas iniciais
onde a recuperação talvez seja possível
Exceções não-verificadas: subclasse de RuntimeException
utilizadas para falhas não-antecipadas
onde a recuperação não é possível
17
![Page 18: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/18.jpg)
O efeito de uma exceção O método de lançamento da exceção termina
prematuramente
Nenhum valor de retorno é retornado
Controle não retorna ao ponto da chamada do cliente Portanto, o cliente não pode prosseguir de qualquer
maneira, pois o programa é interrompido
Um cliente pode ‘capturar’ uma exceção, para tentar recuperar-se do erro ou enviar uma mensagem mais amigável ao usuário/cliente
18
![Page 19: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/19.jpg)
Exceções não-verificadas A utilização dessas exceções ocorre de
forma ‘não-verificada’ pelo compilador
Causam o término do programa se não capturadas. Essa é a prática normal
IllegalArgumentException é um exemplo típico
19
![Page 20: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/20.jpg)
Verificação de argumento
public void ContactDetails getDetails(String key)
{
if(key == null) {
throw new NullPointerException(
"null key in getDetails");
}
if(key.trim().length() == 0) {
throw new IllegalArgumentException(
"Empty key passed to getDetails");
}
return (ContactDetails) book.get(key);
}
• É importante verificar se os argumentos estão corretos antes de
prosseguir com o propósito principal do método
20
![Page 21: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/21.jpg)
Exceções em construtores
public ContactDetails(String name, String phone, String address)
{
if(name == null) { name = ""; }
if(phone == null) { phone = ""; }
if(address == null) { address = ""; }
this.name = name.trim();
this.phone = phone.trim();
this.address = address.trim();
if(this.name.length() == 0 && this.phone.length() == 0) {
throw new IllegalStateException(
"Either the name or phone must not be blank.");
}
}
• Exceções também podem ser lançadas a partir de construtores
• Neste caso, deseja-se evitar criar uma entrada que não se
possa indexar21
![Page 22: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/22.jpg)
Tratamento de exceções
Exceções verificadas devem ser capturadas
O compilador assegura que a utilização dessas exceções seja fortemente controlada Tanto no servidor como no cliente
Se utilizadas apropriadamente, é possível ao programa recuperar-se das falhas
22
![Page 23: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/23.jpg)
A cláusula throws Métodos que lançam uma exceção
verificada devem incluir uma cláusula throws :
public void saveToFile(String destinationFile)
throws IOException
23
![Page 24: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/24.jpg)
O bloco try Clientes que capturam uma exceção devem
proteger a chamada com um bloco try:
try {
Proteja uma ou mais instruções aqui
}
catch (Exception e) {
Informe da exceção e recuperação aqui
}
Qualquer número de instruções pode ser incluído em um bloco try
A cláusula catch tentará capturar exceções geradas por qualquer instrução dentro do tryprecedente
24
![Page 25: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/25.jpg)
O bloco try
try{
addressbook.saveToFile(filename);
tryAgain = false;
}
catch(IOException e) {
System.out.println("Unable to save to " + filename);
tryAgain = true;
}
1. Exceção lançada a partir daqui
2. Controle transferido para cá
• As instruções no bloco try são denominadas protegidas. Se nenhuma
exceção ocorrer, elas serão executadas normalmente e o catch será
ignorado
• Uma exceção impede que o fluxo normal de controle continue,
retomando-se a execução a partir da cláusula catch
• Depois que o catch for completado, a execução não retornará para o
try25
![Page 26: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/26.jpg)
Múltiplas exceçõestry {
...
ref.processar();
...
}
catch(EOFException e) {
// Toma a ação apropriada para uma exceção
// de final de arquivo alcançado
...
}
catch(FileNotFoundException e) {
// Toma a ação apropriada para uma exceção
// de arquivo não encontrado
...
}
• As cláusulas catch são verificadas na ordem em que são escritas
• Uma cláusula catch para um tipo particular de exceção não deve se seguir a
outro catch que se refira a um dos seus supertipos – o supertipo capturará a
exceção antes do catch do subtipo (polimorfismo)
• Porém, pode-se aproveitar esta característica e fazer um catch único para
todas as exceções (tipos e subtipos)
• Uma exceção pode ser propagada do método chamado para o chamador26
![Page 27: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/27.jpg)
A cláusula finally
try {
Proteja uma ou mais instruções aqui
}
catch(Exception e) {
Informe e recupere a partir da exceção aqui
}
finally {
Realize quaisquer ações aqui quer ou não
uma exceção seja lançada
}
• A cláusula finally é opcional e é sempre executada, mesmo que não ocorra
uma exceção
• Se uma exceção for lançada no try, mas não capturada, o finally ainda assim é
executado – p. ex., uma exceção propagada a partir de um método
• Na prática, finally pode ser usado para fechar arquivos, conexões de rede, de
banco de dados...27
![Page 28: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/28.jpg)
Definindo novas classes de exceção
Estenda Exception ou Runtime-Exception
Defina novos tipos para fornecer melhores informações diagnósticas
Inclua informações sobre a notificação e/ou recuperação
28
![Page 29: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/29.jpg)
public class NoMatchingDetailsException extends Exception
{
private String key;
public NoMatchingDetailsException(String key)
{
this.key = key;
}
public String getKey()
{
return key;
}
public String toString()
{
return "No details matching '" + key +
"' were found.";
}
}
• A nova exceção NoMatchingDetailsException, específica da aplicação,
permite que o valor de key seja disponibilizado para as aplicações que queiram
se recuperar do erro.29
![Page 30: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/30.jpg)
Recuperação após erro Clientes devem tomar nota dos informes de
erros. Verifique o valor de retorno
Não ‘ignore’ exceções
Inclua o código para a tentativa de recuperação. Freqüentemente isso exigirá um loop
Um exemplo equivocado de tratamento de exceções:AddressDetails details = null;
try {
details = addresses.getDetails(...);
}
catch (Exception e) {
System.out.println(“Error: “ + e);
}
...30
![Page 31: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/31.jpg)
Tentativa de recuperação// Tenta salvar o catálogo de endereços
boolean successful = false;
int attempts = 0;
do {
try {
addressbook.saveToFile(filename);
successful = true;
}
catch(IOException e) {
System.out.println("Unable to save to " + filename);
attempts++;
if(attempts < MAX_ATTEMPTS) {
filename = um nome de arquivo alternativo;
}
}
} while(!successful && attempts < MAX_ATTEMPTS);
if(!successful) {
// Informa o problema e desiste
}
31
![Page 32: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/32.jpg)
Prevenção de erro Clientes podem freqüentemente utilizar os
métodos de pesquisa do servidor para evitar erros Ter clientes mais robustos significa que os servidores
podem ser mais confiáveis
Exceções não-verificadas podem ser utilizadas
Simplifica a lógica do cliente
Pode aumentar o acoplamento cliente/servidor
32
![Page 33: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/33.jpg)
Entrada e saída de texto Entrada e saída são particularmente
propensas a erros Envolvem interação com o ambiente externo: Arquivo corrompido
Arquivo não existe
Disco cheio / quota excedida
Permissões insuficientes...
O pacote java.io suporta entrada e saída
java.io.IOException é uma exceção verificada
33
![Page 34: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/34.jpg)
Leitores, escritores e fluxos Leitores e escritores lidam com entrada textual Com base no tipo char
Fluxos lidam com dados binários Com base no tipo byte
O exemplo a seguir (address-book-io) ilustra a E/S textual
O projeto também inclui métodos para ler/gravar versões binárias dos objetos AddressBook e ContactDetails -- serialização
Mais informações sobre I/O: http://java.sun.com/docs/books/tutorial/essential/index.html
34
![Page 35: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/35.jpg)
Saída de texto Utiliza a classe FileWriter
Abre um arquivo
Grava no arquivo
Fecha o arquivo
Falha em um ponto qualquer resulta em uma IOException
Arquivo: AddressBookFileHandler.java, do projeto address-
book-io
35
![Page 36: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/36.jpg)
Saída de texto
try {
FileWriter writer = new FileWriter(nome do arquivo);
while(há mais texto para escrever) {
...
writer.write(próxima parte do texto);
...
}
writer.close();
}
catch(IOException e) {
algo saiu errado ao acessar o arquivo
}
36
![Page 37: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/37.jpg)
Entrada de texto Utiliza a classe FileReader
‘Empacota’ com BufferedReader para entrada baseada em linha Abre um arquivo
Lê do arquivo
Fecha o arquivo
Falha em um ponto qualquer resulta em uma IOException
37
![Page 38: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/38.jpg)
Entrada de texto
try {
BufferedReader reader = new BufferedReader(
new FileReader("nome do arquivo "));
String line = reader.readLine();
while(line != null) {
faça algo com a linha
line = reader.readLine();
}
reader.close();
}
catch(FileNotFoundException e) {
o arquivo específico não pode ser localizado
}
catch(IOException e) {
algo saiu errado com a leitura ou fechamento
}
38
![Page 39: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/39.jpg)
Revisão (1) Erros em tempo de execução surgem por
várias razões:
Uma chamada cliente inadequada a um objeto servidor
Um servidor incapaz de atender a uma solicitação
Erro de programação no cliente e/ou servidor
39
![Page 40: Tratamento de Exceções e I/O de Arquivosgeraldo/poo/9.0excecoes.pdf · Principais conceitos Programação defensiva Antecipar o que pode sair errado Lançamento e tratamento de](https://reader035.fdocumentos.com/reader035/viewer/2022070905/5f75dc89f3da081c39471b91/html5/thumbnails/40.jpg)
Revisão (2)
Erros em tempo de execução freqüentemente levam a falhas de programa
Programação defensiva antecipa erros —tanto no cliente como no servidor
Exceções fornecem um mecanismo de informe e recuperação de erros
40