Exceção vs Erro
Comportamentos inesperados podem ocorrer quando um programa está em execução. Isso pode ser devido a exceções ou erros. As 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?
Exception é um evento que pode perturbar o fluxo normal do programa. O nome exceção 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 Exception 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 tentará encontrar alguém para tratá-lo dentro da pilha de chamadas percorrendo-o na ordem inversa (na qual os métodos foram chamados). Pilha de chamadas é a lista ordenada de métodos, que foram chamados antes do método em que ocorreu a exceção. O sistema de tempo de execução é bem-sucedido se encontrar um método com um manipulador de exceção. O manipulador de exceção é um bloco de código que pode manipular oficialmente a referida exceção. Se o sistema de tempo de execução encontrar um manipulador apropriado (ou seja, o tipo de exceção corresponde ao tipo que pode ser tratado), 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 herdam de 'classe de lançamento'. 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 exigir uma quantidade de memória maior do que a disponível. Esses erros não podem ser tratados em 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. Erros são simplesmente condições anormais, que nunca devem ocorrer em circunstâncias normais e, portanto, nunca 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?
Ambos os erros e exceções são ocorrências indesejadas durante a execução de um programa. No entanto, eles têm diferenças fundamentais. Exceções podem ser previstas pelo programador, enquanto um erro é difícil de prever. As exceções podem ser marcadas ou desmarcadas. Mas os erros são sempre desmarcados. As exceções normalmente indicam um erro causado pelo programador. No entanto, os erros ocorrem devido a um erro do sistema ou ao uso inadequado de um recurso. Portanto, as exceções devem ser tratadas no nível do aplicativo, enquanto os erros devem ser tratados no nível do sistema (somente se possível). Depois de tratar uma exceção, você tem a garantia de retornar ao fluxo normal do programa. Mas mesmo que um erro seja detectado, o programador pode não saber como lidar com isso em primeiro lugar. Ao contrário do tratamento de erros tradicional, as exceções permitem separar o código de tratamento de erros do código normal.