JavaRush /Blogue Java /Random-PT /Exceções e seu tratamento
articles
Nível 15

Exceções e seu tratamento

Publicado no grupo Random-PT
Exceções ou situações (estados) excepcionais são erros que ocorrem em um programa durante sua operação. Todas as exceções em Java são objetos. Portanto, eles podem ser gerados não apenas automaticamente quando ocorre uma situação excepcional, mas também criados pelo próprio desenvolvedor. Hierarquia de classes de exceção: Exceções e seu tratamento - 1As exceções são divididas em várias classes, mas todas têm um ancestral comum - a classe Throwable. Seus descendentes são as subclasses Exceptione Error. As exceções ( Exceptions) são o resultado de problemas em um programa que são, em princípio, solucionáveis ​​e previsíveis. Por exemplo, a divisão por zero ocorreu em números inteiros. Erros ( Errors) são problemas mais sérios que a especificação Java afirma que você não deve tentar resolver em seu próprio programa porque são problemas no nível da JVM. Por exemplo, exceções deste tipo ocorrem se a memória disponível para a máquina virtual acabar. O programa ainda não poderá fornecer memória adicional para a JVM. Em Java, todas as exceções são divididas em três tipos: exceções verificadas ( checked) e exceções não verificadas ( unchecked) que incluem erros ( Errors) e exceções em tempo de execução ( RuntimeExceptionsdescendente de classe Exception). Exceções controladas são erros que podem e devem ser tratados em um programa; todos os descendentes de uma classe Exception(mas não RuntimeException) pertencem a esse tipo. O tratamento de exceções pode ser feito utilizando operadores try…catchou transferido para a parte externa do programa. Por exemplo, um método pode passar exceções que ocorrem nele em níveis superiores na hierarquia de chamadas sem tratá-lo sozinho. Exceções não verificadas não requerem tratamento, mas você pode tratar exceções de classe se desejar RuntimeException. Vamos compilar e executar o seguinte programa:
class Main {
     public static void main(String[] args) {
         int a = 4;
         System.out.println(a/0);
     }
}
Ao iniciar, a seguinte mensagem será exibida no console:
Exception in thread "main" java.lang.ArithmeticException: / by zero
        at Main.main(Main.java:4)
A mensagem mostra a classe da exceção que ocorreu - ArithmeticException. Esta exceção pode ser tratada:
class Main {
     public static void main(String[] args) {
         int a = 4;
         try {
              System.out.println(a/0);
         } catch (ArithmeticException e) {
              System.out.println("Произошла недопустимая арифметическая операция");
         }
     }
}
Agora, em vez de uma mensagem de erro padrão, será executado um bloco catchcujo parâmetro é o objeto e da classe correspondente à exceção (o próprio objeto pode receber qualquer nome, será necessário se quisermos lançar à força esta exceção novamente, por exemplo, para que seja verificado algum outro manipulador). Neste caso, o bloco trycontém o fragmento do programa onde uma exceção poderia potencialmente ocorrer. Pode try-se corresponder a vários blocos catch com diferentes classes de exceção.
import java.util.Scanner;
class Main {
    public static void main(String[] args) {
     int[] m = {-1,0,1};
        Scanner sc = new Scanner(System.in);
        try {
            int a = sc.nextInt();
            m[a] = 4/a;
            System.out.println(m[a]);
        } catch (ArithmeticException e) {
            System.out.println("Произошла недопустимая арифметическая операция");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Обращение по недопустимому индексу массива");
        }
    }
}
Se, após iniciar o programa apresentado, o usuário digitar pelo teclado 1 ou 2, o programa será executado sem criar exceções. Se o usuário inserir 0, ocorrerá uma exceção de classe ArithmeticExceptione será tratada pelo primeiro bloco catch. Se o usuário inserir 3, ocorrerá uma exceção de classe ArrayIndexOutOfBoundsException(array fora dos limites) e será processada pelo segundo bloco catch. Se o usuário inserir um número não inteiro, por exemplo, 3.14, ocorrerá uma exceção de classe InputMismatchException(incompatibilidade de tipo de entrada) e será lançada no formato de erro padrão, pois não tratamos isso de forma alguma. Você pode, no entanto, adicionar um manipulador para a classe Exception, já que esta classe é a classe pai para todas as outras exceções verificadas, ela irá capturar qualquer uma delas (incluindo InputMismatchException).
import java.util.Scanner;
class Main {
    public static void main(String[] args) {
        int[] m = {-1,0,1};
        int a = 1;
        Scanner sc = new Scanner(System.in);
        try {
            a = sc.nextInt();
            m[a-1] = 4/a;
            System.out.println(m[a]);
        } catch (ArithmeticException e) {
            System.out.println("Произошла недопустимая арифметическая операция");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Обращение по недопустимому индексу массива");
        } catch (Exception e) {
            System.out.println("Произошло ещё Howое-то исключение");
        }
    }
}
Como as exceções são construídas em uma hierarquia de classes e subclasses, você deve primeiro tentar lidar com exceções mais específicas e só depois com as mais gerais. Ou seja, se colocássemos o bloco com tratamento de exceções de classe primeiro (e não terceiro) Exception, nunca veríamos nenhuma mensagem de erro diferente de “Alguma outra exceção ocorreu” (todas as exceções seriam capturadas imediatamente por este bloco e não alcançariam o bloco). descansar). Uma adição opcional aos blocos try…catchpode ser um bloco finally. Os comandos nele colocados serão executados em qualquer caso, independentemente de ocorrer ou não uma exceção. Apesar de quando ocorre uma exceção não tratada, a parte do programa que resta após a geração desta exceção não é executada. Por exemplo, se ocorrer uma exceção durante alguns cálculos demorados, finallyvocê poderá mostrar ou salvar resultados intermediários em um bloco. Link para a fonte: Exceções e seu tratamento
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION