Exceção vs erro
Comportamento inesperado provavelmente ocorrerá quando um programa estiver sendo executado. Isso pode ser devido a exceções ou erros. Exceções são eventos que podem perturbar o fluxo normal do programa. Erros são condições que podem ser consideradas irrecuperáveis. As exceções estão principalmente relacionadas ao próprio aplicativo, enquanto os erros estão relacionados ao sistema no qual o programa está sendo executado..
O que é uma exceção?
Exceção é um evento que pode 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. O objeto de exceção é criado pelo método no qual a exceção ocorreu. O objeto de exceção contém informações úteis, como o tipo e a descrição da exceçã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). A pilha de chamadas é a lista ordenada de métodos, que foram chamados antes do método em que a exceção ocorreu. 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 (ou seja, o tipo de exceção corresponder ao tipo que pode ser manipulado), 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'. NullPointerException e ArrayIndexOutOfBoundsException são duas exceções comuns em Java.
O que é um erro?
Um erro é uma condição que pode ser considerada irrecuperável, como o programa que requer uma quantidade de memória maior que a disponível. Esses erros não podem ser tratados no tempo de execução. Se ocorrer um erro, o programa será encerrado. Em Java, os erros são herdados da classe Throwable. Erros geralmente representam problemas sérios que o programador (ou o aplicativo) não deve tentar detectar. Os erros são simplesmente condições anormais, que nunca se espera que ocorram em circunstâncias normais e, portanto, nunca estão previstas. Por exemplo, OutOfMemoryError, StackOverflowError e ThreadDead são esses erros. Os métodos nunca devem ter manipuladores para erros.
Qual é a diferença entre Exceção e Erro?
Erros e exceções são ocorrências indesejadas durante a execução de um programa. No entanto, eles têm diferenças importantes. Exceções podem ser previstas pelo programador, enquanto um erro é difícil de prever. Exceções podem ser marcadas ou desmarcadas. Mas os erros são sempre desmarcados. Exceções geralmente indicam um erro causado pelo programador. No entanto, os erros ocorrem devido a um erro do sistema ou a um uso inadequado de um recurso. Portanto, as exceções devem ser tratadas no nível do aplicativo, enquanto os erros devem ser resolvidos no nível do sistema (somente se possível). Depois de manipular uma exceção, você garante o retorno ao fluxo normal do programa. Mas mesmo se um erro for detectado, o programador pode não saber como lidar com isso em primeiro lugar. Ao contrário do tratamento tradicional de erros, as exceções permitem separar o código de tratamento de erros do código normal.