Exceções JAVA
O tratamento de erros em Java É um dos mecanimos mais poderosos para tratar os chamados runtime errors, de modo a que o fluxo normal do programa possa ser mantido. https://techterms.com/definition/runtime_error
Definição A nível geral, uma exceção é uma condição anormal. Em Java, uma exceção é um evento que quebra o fluxo normal das instruções de um programa. Trata-se de um objeto que é lançado em tempo de execução.
Manipulação de Exceções É o mecanismo que permite tratar os runtime errors.
Vantagens Manter o fluxo normal das instruções de um programa.
Exemplo Supondo que temos 10 instruções e que ocorre uma exceção na instrução 5. O resto do código não será executado (instruções 6 a 10). Ao efetuar a manipulação de exceções o resto do código já será executado.
Hierarchy of Java Exception classes
Categorias de Exceções 1. Checked Exception 2. Unchecked Exception 3. Error
Checked Exception São as classes que derivam da classe Throwable, à exceção de RuntimeException e Error. São verificadas no chamado compile-time (no momento de compilação).
Unchecked Exception São as classes que derivam de RuntimeException. Exemplos: ArithmeticException NullPointerException ArrayIndexOutOfBoundsException Não são verificadas no chamado compile-time, mas sim no runtime.
Error Algo irrecuperável. Por exemplo: OutOfMemoryError VirtualMachineError AssertionError
Exemplos concretos onde ocorrem exceções
Exemplo 1 - ArithmeticException Divisão de um número por zero.
Exemplo 2 - NullPointerException Acontece quando existe uma variável com valor nulo.
Exemplo 3 - NumberFormatException Acontece quando há o formato errado de um número. Por exemplo, converter uma variável do tipo string, que contém letras, para um número.
Exemplo 4 - ArrayIndexOutOfBoundsException Acontece quando se insere um valor no índice errado de um array.
Palavras reservadas para trabalhar com exceções Try Catch Finally Throw throws
O bloco TRY É usado para tratar o código que pode provocar uma exceção. Deve ser usado dentro do main. Deve ser seguido ou de um catch ou de um finally.
TRY-CATCH Sintaxe
TRY-FINALLY Sintaxe
O bloco CATCH É usado para tratar a exceção. Deve ser colocado, apenas, a seguir ao bloco TRY. Podem usar-se vários blocos CATCH num único TRY.
Exemplo de um programa sem tratamento de exceções
Solução através do tratamento de exceções
Um bloco TRY com múltiplos CATCH
Blocos TRY encadeados
O bloco FINALLY É usado para executar código importante, tal como: fechar uma conexão de bases de dados, fechar um ficheiro, etc. É sempre executado o bloco que está dentro dele. Fica a seguir a um bloco TRY ou a um bloco CATCH. É opcional.
Exemplo
Java throw exception
A palavra reservada throw É usada para lançar propositadamente uma exceção. É possível utilizar a palavra throw nas checked e unchecked exceptions. Também é usada para trabalhar com exceções personalizadas.
Sintaxe
Exemplo 1
Exemplo 2
A palavra reservada throws
É usada para Declarar uma exceção. Dá informação ao programador de que poderá ocorrer uma exceção. Por isso, será boa ideia realizar o tratamento da exceção, de forma a que o fluxo das instruções do programa decorra de forma normal.
Importante O tratamento de exceções é usado principalmente para tratar as checked exceptions. Se ocorrer alguma unchecked exception, tal como NullPointerException, é culpa do programador. Ou seja, ele não está a testar o código antes de o programa ser usado.
Sintaxe
Que tipo de exceção deverá ser declarada? Checked exception, apenas.
Porquê? Porque as unchecked exceptions estão dentro do controlo do programador, por isso este deverá corrigir o código. Porque os error estão fora do controlo do programador, por isso não há nada que ele possa fazer.
Diferença entre throw e throws throw A palavra throw é usada para lançar propositadamente uma exceção. As Checked exceptions não podem ser propagadas através do throw. Throw é seguido de uma instância. Throw é usado dentro do método. Não se podem lançar múltiplas exceções. throws A palavra throws é usada para declarar uma exceção. As Checked exceptions podem ser propagadas com o throws. Throws é seguido por uma classe. Throws é usado na assinatura do método. Podem ser declaradas múltiplas exceções, ex.: public void method()throws IOException,SQLException.
Exemplos
Exercício Alterar o método divisão da calculadora, de forma a que seja utilizada a palavra throws.