Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Por que não e.getClass()

os professores falaram que não gosta muito de usar

catch (Exception e) {}

Porque não tem muito bem como tratar o erro

"Aconteceu algo, não sei o que é".

Mas não é só pegar a classe com e.getClass() e tratar com um switch? Na minha concepção, isso fica mais organizado do que um trilhão de catch.

try {
    // Código que pode gerar uma exceção
} catch (Exception e) {
    switch (e.getClass().getSimpleName()) {
        case "NullPointerException":
            System.out.println("Erro: Ponteiro nulo encontrado!");
            break;
        case "ArrayIndexOutOfBoundsException":
            System.out.println("Erro: Índice de array fora dos limites!");
            break;
        case "ArithmeticException":
            System.out.println("Erro: Operação matemática inválida!");
            break;
        case "IOException":
            System.out.println("Erro: Problema de entrada/saída!");
            break;
        default:
            System.out.println("Erro desconhecido: " + e.getMessage());
            break;
    }
}
1 resposta
solução!

Olá, Iago. Tudo bem?

Primeiro, ao capturar exceções específicas com múltiplos blocos catch, você está explicitamente lidando com cada tipo de erro de forma separada, o que pode tornar o código mais claro e fácil de manter. Isso também ajuda a garantir que você está tratando apenas as exceções que espera e sabe como resolver, em vez de tentar lidar com todas as possíveis exceções de uma só vez.

Além disso, o uso de e.getClass() com um switch pode ser menos eficiente, já que você está capturando todas as exceções como Exception e depois verificando o tipo em tempo de execução. Isso pode resultar em uma perda de informações sobre a exceção e tornar o tratamento de erros menos preciso.

Por exemplo, se você tiver um catch específico para NullPointerException, você pode adicionar lógica específica para lidar com isso, como registrar informações adicionais ou corrigir o problema de forma programática. Com um switch, você teria que lidar com isso de maneira genérica, o que pode não ser tão eficaz.

Aqui está um exemplo de como múltiplos blocos catch podem ser usados para tratar exceções específicas de maneira clara:

try {
    // Código que pode gerar uma exceção
} catch (NullPointerException e) {
    System.out.println("Erro: Ponteiro nulo encontrado!");
    // Lógica adicional para tratar NullPointerException
} catch (ArrayIndexOutOfBoundsException e) {
    System.out.println("Erro: Índice de array fora dos limites!");
    // Lógica adicional para tratar ArrayIndexOutOfBoundsException
} catch (ArithmeticException e) {
    System.out.println("Erro: Operação matemática inválida!");
    // Lógica adicional para tratar ArithmeticException
} catch (IOException e) {
    System.out.println("Erro: Problema de entrada/saída!");
    // Lógica adicional para tratar IOException
} catch (Exception e) {
    System.out.println("Erro desconhecido: " + e.getMessage());
    // Lógica para tratar exceções desconhecidas
}

Espero ter ajudado e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!