Exceções - LEBIOM MOPRO 2023/24 PDF

Document Details

PrincipledPanda

Uploaded by PrincipledPanda

ISEP

Marílio Cardoso

Tags

java exceções programação exceções em java engenharia biomédica

Summary

This document is a presentation about Java exceptions. It covers the basics, types, and examples of exceptions in a Java programming context. It's likely intended for students in a biomedical engineering course named MOPRO in 2023/24.

Full Transcript

Licenciatura em Engenharia Biomédica MOPRO Modelação e Programação 2023/24 Marílio Cardoso - [email protected] Exceções O que é uma exceção? 2 Exceções  Eventos que ocorrem em tempo de execução do prog...

Licenciatura em Engenharia Biomédica MOPRO Modelação e Programação 2023/24 Marílio Cardoso - [email protected] Exceções O que é uma exceção? 2 Exceções  Eventos que ocorrem em tempo de execução do programa (runtime)  Interrompem de forma abrupta o fluxo normal de execução das instruções  Indicam a ocorrência de erros ou condições excecionais no programa 3 Exceções Dados Eventos excecionais inválidos  São indesejados  Circunstâncias externas ao programa  Provocam terminação abrupta do  Erros nos dados de entrada fornecidos programa o Utilizador o Podem provocar perda de trabalho o Ficheiros Ficheiro inexistente  Causas o Rede  Erros de programação  Limitações físicas do hardware Disco o Exemplo: Divisão por zero  Erros de dispositivos /memória cheio Falha rede, erro ! impressora, …  Conclusão  Não é possível evitar completamente … eventos Excecionais! 4 Exceções  Uma exceção é um objeto criado quando ocorre uma situação anómala, acompanhado por uma interrupção de execução normal do programa  Uma exceção contém informação sobre:  O tipo de evento  O estado do programa quando o evento ocorre  Quando ocorre uma exceção, o fluxo de execução é detido e o programa passa o controlo para onde é capturada a exceção  Vantagens:  Separa o código do tratamento de erros do código restante  Possibilita a transmissão de erros através dos métodos invocados  Permite agrupar tipos de erros relacionados entre si 5 Exceções Tipos de exceções em Java Nativas (“built-in”) Próprias (“user-defined) 6 Exceções Hierarquia de exceções em Java Throwable Superclasse de todos os erros e exceções em Java Exception Error RunTime Other Exception Exception 7 Exceções Hierarquia de exceções em Java  As exceções são derivadas da classe Throwable, que possui os métodos:  String getMessage() – devolve o relatório do erro enviado por quem lançou a exceção  void printStackTrace() – escreve o caminho percorrido pela exceção desde que foi lançada até ser capturada  String toString() – devolve uma string com a descrição da exceção 8 Exceções Tipos de classes de exceções  Runtime (unchecked)  Não runtime (checked) Obrigatório tratar Classes de exceções Exception Não Runtime RunTimeException Classes de exceções Runtime 9 Exceções Classes de exceções em Java  Hierarquia No topo as mais genéricas parcial das Em baixo as mais específicas classes de exceções As mais escuras são Checked exceptions 10 Exceções Package java.io  Alguns tipos de exceções verificadas estão definidos no package java.io  Colocar as diretivas import no início do ficheiro de código que fará uso de File I/O e de exceções import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.Scanner; public class LineNumberer { public void openFile() throws FileNotFoundException {... } } 11 Exceções Package java.lang  Alguns tipos de exceções não verificadas estão definidos no package java.lang  ArithmeticException: despoletada por situações de erros em processamento aritmético (ex.: uma divisão inteira por 0)  NumberFormatException: despoletada quando ocorre a tentativa de converter uma string para um formato numérico, mas o seu conteúdo não é adequado (ex: “36G8”). É uma subclasse de IllegalArgumentException  IndexOutOfBounds: despoletada quando ocorre a tentativa de acesso a um índice inválido de um array (i.e., fora dos limites válidos do array). É a superclasse de ArrayIndexOutOfBoundsException, para arrays, e de StringIndexOutOfBounds, para strings  NullPointerException: despoletada quando ocorre a tentativa de se usar uma referência de um objeto que ainda não foi inicializada  ClassNotFoundException: despoletada quando a máquina virtual JAVA tenta carregar uma classe mas não foi possível encontrá-la durante a execução do programa 12 Exceções Exemplo – Índice de array fora dos limites  Durante a execução:  Índice fora dos limites ⇒ Erro de execução ⇒ Evento excecional ArrayIndexOutOfBoundsException ⇒ Programa termina abruptamente 13 Exceções Exemplo – Índice de array fora dos limites  Na saída:  Tipo de evento excecional  Origem do evento  Sequência de métodos envolvidos (pela ordem inversa) Tipo de evento excecional Origem do evento (classe, método e linha) 14 Exceções Exemplo – Divisão por zero  Durante a execução:  Divisão por zero ⇒ Erro de execução ⇒ Evento excecional ArithmeticException ⇒ Programa termina abruptamente 15 Exceções Exemplo – Divisão por zero  Na saída:  Tipo de evento excecional  Origem do evento  Sequência de métodos envolvidos (pela ordem inversa) Tipo de evento Origem do evento (classe, excecional método e linha) 16 Exceções Exemplo – Abertura de ficheiro inexistente  Durante a execução:  Índice fora dos limites ⇒ Erro de execução ⇒ Evento excecional FileNotFoundException ⇒ Programa termina abruptamente 17 Exceções Exemplo – Abertura de ficheiro inexistente  Na saída:  Tipo de evento excecional  Origem do evento  Sequência de métodos envolvidos (pela ordem inversa) Tipo de evento Origem do evento (classe, excecional método e linha) 18 Exceções Tratamento de exceções Ocorrência de Criação da Tratamento Lançamento um problema exceção ! new Exception throw try/catch 19 Exceções Tratamento de exceções  Aplica-se a três tipos de exceções:  Error: Erros internos (ex: OutOfMemoryError) o Raras, não consideradas aqui  Unchecked: Descendentes de RuntimeException o Devidas a erros no programa (ex: IndexOutOfBoundsException) o O compilador não verifica se são tratadas  Checked: Todas as outras exceções o Não são da responsabilidade do programador (ex: IOException) o O compilador verifica (checks) se são tratadas; se não forem tratadas o programa não compila Checked exceptions devem-se a circunstâncias que o programador não pode evitar 20 Exceções Mecanismo try/catch  Linhas de código potenciadoras da exceção ficam dentro do bloco try/catch  O código de tratamento da exceção está no bloco try/catch try { // linha de código que causa a exceção } catch ( ExcecaoTipo1 e ) { //código do tratamento da exceção do tipo: ExcecaoTipo1 } catch (ExcecaoTipo2 e ) { // de nível mais elevado na hierarquia //código do tratamento da exceção do tipo: ExcecaoTipo2 //eventualmente pode relançar a exceção throw e; } finally { //código executado quer tenha havido ou não exceção } } 21 Exceções Como usar try/catch  Lançar cedo  Quando um método deteta um problema que não pode resolver, é melhor lançar uma exceção em vez de tentar efetuar uma correção imperfeita  Capturar tarde  Pelo contrário, um método deve apenas capturar uma exceção se esse método pode realmente remediar a situação  Caso contrário, o melhor é simplesmente propagar a exceção ao método anterior (origem da chamada), permitindo o tratamento da exceção de forma adequada 22 Exceções Cláusula throws  Em alternativa ao tratamento local de checked exceptions, é possível transmitir a exceção ao método que invocou o método onde é detetada a exceção  Os métodos que poderão gerar estas exceções e que não as tratem devem ser assim declarados: É possível incluir É necessário especificar todas unchecked as checked exceptions exceptions que este método possa lançar  Se um método trata internamente uma checked exception, não precisa de a lançar (throw)  O método não necessita de declarar a cláusula throws  Declarando exceções na cláusula throws “passa a tarefa” de tratamento ao método que o chama ou a outro ainda acima 23 Exceções Cláusula finally  Cláusula opcional num bloco try/catch  Usada quando é necessário efetuar alguma ação num método, independentemente da exceção ser ou não lançada Esta variável tem que ser public void printOutput(String filename) throws declarada for do bloco try IOException Assim que o para poder ser usada no { bloco try é bloco finally PrintWriter out = new PrintWriter(filename); try alcançado, as { instruções numa Este método poderá lançar writeData(out); cláusula finally } são executadas, uma exceção I/O finally { quer a exceção Esta instrução out.close(); seja ou não é sempre } lançada executada } 24 Exceções Como usar try/catch  Não “silenciar” exceções  Quando se invoca um método que lança uma checked exception e não foi especificado um handler, o compilador gera um erro  Poderá ser tentador escrever um bloco catch vazio para “silenciar” o compilador e voltar ao código mais tarde – Má prática o As exceções foram criadas para reportar problemas a um handler competente o Construir um handler incompetente apenas esconde uma situação de erro que poderá vir a ser grave 25 Exceções Como usar try/catch  try {...}  Define o Bloco de código suscetível de gerar erros de execução  catch(Tipo_de_exceção parâmetro){...}  Define o Tipo de exceção a capturar o Parâmetro recebe a exceção capturada o Bloco de código para tratar esse tipo de exceção  finally {...}  Opcional  Complementa try o Bloco de código suscetível de gerar erros de execução o Usado sempre que try seja executado 26 Exceções Como usar try/catch 27 Exceções Como usar try/catch  Não usar catch e finally no mesmo bloco try try  A cláusula finally é executada sempre que o bloco try é terminado por uma das seguintes 3 formas: 1. Após a execução da última instrução contida no bloco try catch 2. Após a execução da última instrução de uma cláusula catch, se este bloco try capturou uma exceção 3. Quando uma exceção foi lançada no bloco try e não foi finally capturada 28 Exceções Como usar try/catch  Será melhor usar duas (nested) cláusulas try para controlar try o fluxo try try { PrintWriter out = new PrintWriter(filename); try {... } // Escrever saída finally finally { out.close(); } // Fechar recursos } catch (IOException exception) catch { // Tratar a exceção } 29 Exceções Captura e Tratamento – Exemplo 1  Leitura de dados do utilizador e mensagem de erro com informação não enviada pela exceção Tipo Exception captura exceções de qualquer tipo 30 Exceções Captura e Tratamento – Exemplo 2  Leitura de dados do utilizador e mensagem de erro com informação enviada pela exceção Mensagem de erro veiculada pela exceção capturada 31 Exceções Criação de exceções próprias  A criação de exceções personalizadas (definidas pelo programador) é uma prática comum. Para a sua implementação deve-se escolher para superclasse uma das seguintes classes:  Exception  RuntimeException (ou uma sua subclasse) se a exceção deve ser se a exceção não necessita de ser verificada verificada pelo compilador pelo compilador 32 Exceções Criação de exceções próprias – Exemplo public class ExcecaoPropria extends Exception { public ExcecaoPropria() { Subclasse de super("Exceção Própria"); Exception } public ExcecaoPropria(String msg) { super(msg); } } } 33 Exceções ExcecaoPropria é uma subclasse de Criação de exceções próprias – Exemplo Exception e como no método lerIntPositivo() não é feito o catch da exceção, é obrigatório ter a declaração throws no cabeçalho do método private static lerIntPositivo() throws ExcecaoPropria { Scanner sc = new Scanner(System.in); System.out.println(“Digite um numérico positivo"); int num = Integer.parseInt(sc.nextLine()); Se a conversão não for bem sucedida é lançada a exceção NumberFormatException if (num

Use Quizgecko on...
Browser
Browser