Exceções marcadas e não verificadas em Java

Mohammad Irfan 12 outubro 2023
  1. Exceções verificadas em Java
  2. Exceção não verificada em Java
Exceções marcadas e não verificadas em Java

Este tutorial apresenta o que são exceções marcadas e não verificadas em Java.

Em Java, uma exceção é uma situação que ocorre durante a execução do código e termina a execução de forma anormal. Essa exceção pode ocorrer tanto em tempo de compilação quanto em tempo de execução. Java categoriza amplamente a exceção em dois tipos, marcada e desmarcada. A exceção, que é verificada pelo compilador em tempo de compilação, é conhecida como uma exceção verificada. Enquanto isso, uma exceção que é verificada em tempo de execução é chamada de exceção não verificada.

Para lidar com exceções, Java fornece classes para cada exceção, como NullPointerException, ArrayIndexOutofBoundsException, IOException, etc. A classe Exception está no topo de todas as classes de exceção e qualquer coisa que seja uma subclasse de Exception Exceto para RuntimeException e suas subclasses é uma exceção verificada.

As classes de exceção que herdam RuntimeException como ArithmeticException, NullPointerException e ArrayIndexOutOfBoundsException são chamadas de exceções não verificadas. Eles são verificados em tempo de execução.

Exceções verificadas em Java

Vamos primeiro entender o que é uma exceção e como ela afeta a execução do código. Neste exemplo, estamos gravando dados em um arquivo e este código está sujeito a exceções como FileNotFoundException, IOException, etc. Não fornecemos nenhum manipulador de captura e, como essas são exceções verificadas, o compilador Java fornece não compila o código e lança as exceções em tempo de compilação. Veja o exemplo abaixo.

import java.io.FileOutputStream;

public class SimpleTesting {
  public static void main(String[] args) {
    FileOutputStream fout =
        new FileOutputStream("/home/root/eclipse-workspace/java-project/myfile.txt");
    fout.write(1256);
    fout.close();
    System.out.println("Data written successfully");
  }
}

Resultado:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
	Unhandled exception type FileNotFoundException
	Unhandled exception type IOException
	Unhandled exception type IOException

	at SimpleTesting.main(SimpleTesting.java:8)

Para evitar qualquer encerramento anormal do código, devemos fornecer um manipulador catch para o código. Abaixo está o mesmo código acima, mas tem um manipulador catch para que o código não termine no meio e seja executado corretamente. Veja o exemplo abaixo.

import java.io.FileOutputStream;
public class SimpleTesting {
  public static void main(String[] args) {
    try {
      FileOutputStream fout =
          new FileOutputStream("/home/irfan/eclipse-workspace/ddddd/myfile.txt");
      fout.write(1256);
      fout.close();
      System.out.println("Data written successfully");
    } catch (Exception e) {
      System.out.println(e);
    }
  }
}

Resultado:

Data written successfully

Exceção não verificada em Java

O código a seguir lança ArrayIndexOutOfBoundsException, que é uma exceção não verificada. Este código é compilado com sucesso, mas não é executado porque estamos acessando elementos fora do intervalo do array; portanto, o código lança uma exceção de tempo de execução. Veja o exemplo abaixo.

public class SimpleTesting {
  public static void main(String[] args) {
    int[] arr = {3, 5, 4, 2, 3};
    for (int i = 0; i < arr.length; i++) {
      System.out.println(arr[i]);
    }
    System.out.println(arr[23]);
  }
}

Resultado:

3
5
4
2
3
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 23 out of bounds for length 5
	at SimpleTesting.main(SimpleTesting.java:9)

Artigo relacionado - Java Exception