Exceção verificada vs exceção de tempo de execução
Exceções são tipos especiais de eventos, que podem perturbar o fluxo normal do programa. A exceção do nome vem de "evento excepcional". Lançar uma exceção é o processo de criar um objeto de exceção e entregá-lo ao sistema de tempo de execução. Quando o sistema de tempo de execução recebe o objeto de exceção, ele tenta encontrar alguém para manipulá-lo na pilha de chamadas, percorrendo-o na ordem inversa (na qual os métodos foram chamados). O sistema de tempo de execução é bem-sucedido se encontrar um método com um manipulador de exceções. O manipulador de exceções é um bloco de código que pode manipular oficialmente a exceção mencionada. Se o sistema de tempo de execução encontrar um manipulador apropriado, ele passará o objeto de exceção para o manipulador. Isso é chamado de captura da exceção. No entanto, se a exceção não puder ser tratada, o programa será encerrado. Em Java, as exceções são herdadas da classe Throwable. Exceções verificadas são exceções nas quais o tratamento é imposto pelo compilador. Exceções de tempo de execução são um tipo de exceção, que não são verificadas pelo compilador.
O que é uma exceção verificada?
Exceções verificadas são objetos da classe java.lang.exception ou de suas subclasses (exceto java.lang.RuntimeException e suas subclasses). As exceções marcadas são "marcadas" no momento da compilação. Isso significa que o programador deve capturar ou lançar essas exceções; caso contrário, a compilação reclamará (causando um erro do compilador). Por esse motivo, muitas exceções verificadas são muito conhecidas pelos programadores. Por exemplo, o IOException e suas subclasses são exceções verificadas e, sempre que o programador estiver lidando com o acesso ou a modificação de um arquivo, o compilador verifica para garantir que todas as possíveis IOExceptions sejam atendidas pelo programador..
O que é uma exceção de tempo de execução?
Exceções de tempo de execução consistem em java.lang.RuntimeException e todas as suas subclasses. Teoricamente falando, eles servem ao mesmo objetivo que as exceções verificadas e podem ser lançadas ou tratadas como exceção verificada, mas o tratamento delas não é imposto pelo compilador. Portanto, as exceções de tempo de execução pertencem à família de exceções não verificadas. NullPointerException, NumberFormatEception, ClassCastException e ArrayIndexOutOfBoundsException são exceções comuns de tempo de execução em Java.
Qual é a diferença entre Exceção Verificada e Exceção de Tempo de Execução?
Embora as exceções verificadas e as exceções de tempo de execução sejam ocorrências indesejadas durante a execução de um programa, elas têm suas diferenças. O tratamento de exceção verificado é imposto pelo compilador, mas as exceções de tempo de execução não são. Portanto, as exceções verificadas devem ser lançadas ou manipuladas para que o código seja compilado, mas não existe esse requisito em relação às exceções de tempo de execução. Conseqüentemente, as exceções de tempo de execução pertencem à categoria de exceções não verificadas, juntamente com os erros.
A desvantagem com exceções verificadas é que o programador precisa lidar com isso, mesmo que não saiba como. Portanto, se o programador lançar uma nova exceção sem quebrar o original, o rastreamento de pilha pertencente à exceção original será perdido. É aqui que as exceções de tempo de execução são úteis. Como todas as exceções de tempo de execução podem ser tratadas em um único local, os programadores podem escrever menos quantidade de código. Por outro lado, como as exceções verificadas devem ser capturadas, não há surpresa para o programador. Ela sempre saberá qual exceção verificada pode ser lançada por um determinado método. Ao contrário, várias exceções de tempo de execução podem ser lançadas sem o conhecimento do programador.