Pergunta

Eu estou tentando aprender mais sobre Java básico e os diferentes tipos de Throwables, alguém pode me deixar saber as diferenças entre exceções e erros?

Foi útil?

Solução

Os erros não devem ser capturados ou manipulados (exceto em raríssimos casos). As exceções são o pão ea manteiga de manipulação de exceção. A Javadoc explica muito bem:

Um erro é uma subclasse de Throwable que indica sérios problemas que uma aplicação razoável não deve tentar captura. A maioria desses erros são anormais condições.

olhada em algumas das subclasses de Error, tendo alguns dos seus comentários JavaDoc:

  • AnnotationFormatError -. Lançada quando as tentativas do analisador anotação para ler uma anotação de um arquivo de classe e determina que a anotação está mal formado
  • AssertionError -. Lançado para indicar que uma afirmação falhou
  • LinkageError - As subclasses de LinkageError indicar que uma classe tem alguma dependência em outra classe; No entanto, a última classe tem incompatibly alterado após a compilação da classe anterior.
  • VirtualMachineError - Lançado para indicar que a Máquina Virtual Java está quebrado ou ficou sem recursos necessários para que possa continuar operando.

Há realmente três subcategorias importantes de Throwable:

  • Error - Algo bastante grave tem errado ido a maioria das aplicações deve falhar em vez de tentar lidar com o problema,
  • exceção não verificada (aka RuntimeException) - Muitas vezes, um erro de programação, tais como NullPointerException ou um argumento ilegal. Aplicações às vezes pode lidar ou recuperar a partir desta categoria Throwable -. Ou pelo menos pegá-lo no método run() da Thread, registrar a queixa, e continuar a executar
  • Excepção verificado (aka Tudo o resto) - As candidaturas são esperados para ser capaz de capturar e significativamente fazer algo com o resto, como FileNotFoundException e TimeoutException ...

Outras dicas

Esta href="https://speakerdeck.com/gousiosg/exception-handling-bug-hazards-on-android?slide=8" rel="noreferrer"> slides de Java por @ georgios-gousios concisa explica as diferenças entre erros e exceções em Java.

 Java Exceção Hierarquia

Os erros tendem a sinalizar o fim da sua aplicação como você sabe disso. Ele normalmente não podem ser recuperados a partir e deve fazer com que seu VM para sair. Pegá-los não deve ser feito a não ser para possivelmente iniciar sessão ou exibição e mensagem apropriada antes de sair.

Exemplo: OutOfMemoryError -. Não há muito que você pode fazer como o seu programa não pode ser executado

As exceções são muitas vezes recuperável e mesmo quando não, eles geralmente significa apenas uma tentativa de operação falhou, mas o programa ainda pode continuar.

Exemplo: IllegalArgumentException -. Passou dados inválidos a um método para que chamada de método falhou, mas não afeta as operações futuras

Estes são exemplos simplistas, e não há outra riqueza de informações sobre apenas Exceções sozinho.

coloca melhor :

Um erro é uma subclasse de Throwable que indica sérios problemas que uma aplicação razoável não deve tentar a captura.

Erros -

  1. Errors em java são do tipo java.lang.Error.
  2. Todos os erros em java são do tipo desmarcada.
  3. Errors acontecer em tempo de execução. Eles não serão conhecidos por compilador.
  4. É impossível recuperar de erros.
  5. Errors são principalmente causadas pelo ambiente em que a aplicação está em execução.
  6. Exemplos: java.lang.StackOverflowError, java.lang.OutOfMemoryError

Exceções -

  1. Exceptions em java são do tipo java.lang.Exception.
  2. Exceptions incluir tanto verificada assim como o tipo desmarcada.
  3. As exceções verificadas são conhecidos por compilador onde como exceções não verificadas não são conhecidos por compilador porque eles ocorrem em tempo de execução.
  4. Você pode se recuperar de exceções manuseá-los através de blocos try-catch.
  5. Exceptions são causadas principalmente pela própria aplicação.
  6. Exemplos: exceções verificadas: SQLException, IOException
    Exceções não verificadas: ArrayIndexOutOfBoundException, ClassCastException, NullPointerException

outras leituras: http://javaconceptoftheday.com/difference- entre-erro-vs-excepção-em-java / http://javaconceptoftheday.com/wp-content/uploads/2015/04/ErrorVsException.png

A descrição da classe Error é bastante clara:

Um Error é uma subclasse de Throwable que indica sérios problemas que uma aplicação razoável não deve tentar pegar. A maioria desses erros são condições anormais. o ThreadDeath erro, embora uma condição "normal", é também uma subclasse de Error porque a maioria aplicações não devem tentar pegar -lo.

Um método não é obrigado a declarar em sua cláusula throws quaisquer subclasses de Error que pode ser jogado durante o execução do método, mas não capturados, uma vez que estes erros são condições anormais que nunca deveria ocorrer.

Citado dos próprios do Error classe .

Em suma, você não deve pegar Errors, exceto que você tem uma boa razão para fazê-lo. (Por exemplo, para evitar a sua implementação do servidor web para acidente se um servlet é executado fora de memória ou algo parecido.)

Um Exception, por outro lado, é apenas uma exceção normal, como em qualquer outra língua moderna. Você vai encontrar uma descrição detalhada na documentação da API Java ou qualquer recurso on-line ou off-line.

Há várias semelhanças e diferenças entre as classes java.lang.Exception e java.lang.Error.

Semelhanças:

  • Primeiro - ambas as classes estende java.lang.Throwable e, como resultado herda muitos dos métodos que são comuns a ser usado quando se lida com erros, tais como: getMessage, getStackTrace, printStackTrace e assim por diante.

  • Em segundo lugar, como sendo subclasses de java.lang.Throwable ambos herdam seguintes propriedades:

    • si mesmo e qualquer uma de suas subclasses (incluindo java.lang.Error) Throwable podem ser declarados na lista de exceções do método usando a palavra chave throws. Tal declaração exigida apenas para java.lang.Exception e subclasses, por java.lang.Throwable, java.lang.Error e java.lang.RuntimeException e suas subclasses é opcional.

    • Apenas java.lang.Throwable e subclasses permissão para ser usado na cláusula catch.

    • Apenas java.lang.Throwable e subclasses pode ser usado com palavra-chave -. throw

A conclusão a partir desta propriedade está seguindo ambos java.lang.Error e java.lang.Exception pode ser declarado no cabeçalho do método, pode ser na cláusula catch, pode ser usado com throw palavra-chave.

Diferenças:

  • Primeiro - diferença conceitual: java.lang.Error projetado para ser atirados pela JVM e indicam problemas graves e destinados à paragem a execução do programa, em vez de ser pego (mas é possível que para qualquer outro sucessor java.lang.Throwable).

    A passagem de javadoc descrição sobre java.lang.Error:

    ... indica sérios problemas que uma aplicação razoável deve não tentar captura.

    Em java.lang.Exception oposto projetado para representam os erros esperado e pode ser manuseado por um programador sem terminar execução do programa.

    A passagem de javadoc descrição sobre java.lang.Exception:

    ... indica condições que uma aplicação razoável pode querer captura.

  • A segunda diferença entre java.lang.Error e java.lang.Exception que o primeiro considerado um desmarcada exceção para verificação de exceção em tempo de compilação. Como o lançamento java.lang.Error código de resultado ou de suas subclasses não precisam declarar esse erro no cabeçalho do método. Enquanto jogando java.lang.Exception requerida declaração no cabeçalho do método.

Throwable e sua classe sucessor diagrama (propriedades e métodos são omitidos). enter descrição da imagem aqui

IMO um erro é algo que pode causar o aplicativo a falhar e não deve ser tratada. Uma exceção é algo que pode causar resultados imprevisíveis, mas podem ser recuperados.

Exemplo:

Se um programa foi executado sem memória é um erro que o aplicativo não pode continuar. No entanto, se um programa aceita um tipo de entrada incorreta é uma exceção como o programa pode lidar com isso e redirecionar para receber o tipo de entrada correta.

Aqui está um resumo bom bastante de API Java que um erro e de exceção representa:

Um erro é uma subclasse de Throwable que indica problemas sérios que uma aplicação razoável não deve tentar captura. A maioria desses erros são condições anormais. O erro ThreadDeath, embora uma condição "normal", é também uma subclasse de erro porque a maioria das aplicações não deve tentar pegá-lo.

Um método não é obrigado a declarar em sua cláusula throws quaisquer subclasses de De erro que pode ser jogado durante o execução do método, mas não capturados, uma vez que estes erros são condições anormais que nunca deveria ocorrer.

OTOH, para Exceções, API Java diz:

A classe Exception e suas subclasses são uma forma de Throwable que indica condições que uma aplicação razoável pode querer captura.

Os erros são causados ??principalmente pelo ambiente em que a aplicação está em execução. Por exemplo, OutOfMemoryError ocorre quando JVM ficar sem memória ou StackOverflowError ocorre quando a pilha transborda.

As excepções são causadas principalmente pela própria aplicação. Por exemplo, NullPointerException ocorre quando uma aplicação tenta objeto de acesso nulo ou ClassCastException ocorre quando um tentativas de aplicação para lançar tipos de classe incompatíveis.

Fonte: diferença entre erro Vs Exceção Em Java

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top