Qual é a diferença entre erros e exceções?

Duplicar Possível:
Diferenças entre exceção e erro

Como posso diferenciar entre erros e exceções em Java?

Um erro “indica problemas sérios que um aplicativo razoável não deve tentar capturar”.

enquanto

Uma exceção “indica condições que um aplicativo razoável pode querer capturar”.

Erro junto com RuntimeException e suas subclasss são exceções unchecked . Todas as outras classs de exceção são exceções checked .

As exceções verificadas geralmente são aquelas em que um programa pode ser recuperado e pode ser uma boa ideia recuperar essas exceções programaticamente. Os exemplos incluem FileNotFoundException , ParseException , etc. Espera-se que um programador verifique essas exceções usando o bloco try-catch ou devolva-o ao chamador

Por outro lado, temos exceções não verificadas . Essas são as exceções que podem não acontecer se tudo estiver em ordem, mas ocorrem. Exemplos incluem ArrayIndexOutOfBoundException , ClassCastException , etc. Muitos aplicativos usarão try-catch ou throws clause para RuntimeExceptions e suas subclasss, mas da perspectiva do idioma não é necessário fazer isso. Observe que a recuperação de um RuntimeException é geralmente possível, mas os caras que projetaram a class / exceção consideraram desnecessário para o programador final verificar essas exceções.

Os erros também são exceção não verificada e o programador não é obrigado a fazer nada com isso. Na verdade, é uma má idéia usar uma cláusula try-catch para erros. Na maioria das vezes, a recuperação de um erro não é possível e o programa deve ser encerrado. Exemplos incluem OutOfMemoryError , StackOverflowError , etc.

Observe que, embora Erros sejam exceções não verificadas, não devemos tentar lidar com eles, mas não há problema em lidar com RuntimeExceptions (também exceções não verificadas) no código. Exceções verificadas devem ser tratadas pelo código.

Error e Exception ambos estendem Throwable , mas principalmente Error é lançado pela JVM em um cenário que é fatal e não há nenhuma maneira para o programa de aplicativo recuperar desse erro. Por exemplo, OutOfMemoryError .

Embora até o aplicativo possa gerar um Error mas não seja uma boa prática, os aplicativos devem usar exceções verificadas para condições recuperáveis ​​e exceções de tempo de execução para erros de programação.

Erro é algo que na maioria das vezes você não consegue lidar com isso.

A exceção foi feita para lhe dar uma oportunidade de fazer algo com ela. como tentar outra coisa ou escrever no log.

 try{ //connect to database 1 } catch(DatabaseConnctionException err){ //connect to database 2 //write the err to log } 

No erro geral é que ninguém pode controlar ou adivinhar quando ocorre. A exceção pode ser adivinhada e pode ser controlada. Em Java exceção e erro são sub-class de Throwable.It é diferenciada com base no controle do programa.Erro, como OutOfMemory Error que nenhum programador pode adivinhar e pode manipulá-lo.Ele depende dinamicamente com base na arquitetura, OS e configuração do servidor.Onde como Programador de exceção pode lidar com isso e pode evitar o mau comportamento do aplicativo.Por exemplo, se seu código está procurando por um arquivo que não está disponível, em seguida, IOException é lançada.Essas instâncias programador pode adivinhar e pode lidar com isso.