Create a try-catch block and determine how exceptions alter normal program flow

Em Java, um bloco try-catch é utilizado para lidar com exceções, permitindo que você trate possíveis erros durante a execução do programa. Vou criar um exemplo simples de um bloco try-catch e mostrar como as exceções podem alterar o fluxo normal do programa.

import java.util.Scanner;

public class ExemploTryCatch {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        try {
            // Código que pode gerar uma exceção
            System.out.print("Digite um número: ");
            int numero = Integer.parseInt(scanner.nextLine());

            // Dividir por zero para demonstrar uma exceção
            int resultado = 10 / numero;

            System.out.println("Resultado da divisão: " + resultado);
        } catch (ArithmeticException e) {
            // Bloco executado se ocorrer uma exceção do tipo ArithmeticException
            System.err.println("Erro de divisão por zero. Detalhes: " + e.getMessage());
        } catch (NumberFormatException e) {
            // Bloco executado se ocorrer uma exceção do tipo NumberFormatException
            System.err.println("Erro de formato. Certifique-se de inserir um número válido.");
        } catch (Exception e) {
            // Bloco executado para qualquer outra exceção não tratada pelos blocos anteriores
            System.err.println("Ocorreu uma exceção não esperada. Detalhes: " + e.getMessage());
        } finally {
            // Bloco opcional de código que sempre é executado, independentemente de ocorrer exceção ou não
            System.out.println("Bloco finally - sempre é executado.");
            scanner.close();
        }

        // Código após o bloco try-catch continua a ser executado normalmente
        System.out.println("Programa continua a execução após o bloco try-catch.");
    }
}

Neste exemplo:

  1. O usuário é solicitado a inserir um número.
  2. O programa tenta converter a entrada em um número inteiro e, em seguida, divide 10 pelo número inserido.
  3. Se o usuário inserir zero, uma exceção ArithmeticException será lançada.
  4. Se o usuário inserir algo que não é um número, uma exceção NumberFormatException será lançada.
  5. O bloco catch correspondente será executado para tratar a exceção.
  6. O bloco finally é opcional e sempre será executado, independentemente de ocorrer uma exceção ou não.
  7. O programa continua a execução normalmente após o bloco try-catch.

O uso adequado de blocos try-catch é fundamental para lidar com situações excepcionais e manter a robustez do código.