Tema erros, mas não os escreva em Java! Você provavelmente já sabe algumas coisas sobre exceções em Java . Hoje, pelo menos um conhecimento superficial o beneficiará. Vamos analisar a classe Error e um tipo especial de exceção que assusta muita gente quando aparece em seus stack traces.
No topo da hierarquia de exceções de Java está a classe Throwable , que possui dois descendentes:
- Exception , que é responsável por erros em seu programa.
- E nosso herói de hoje — Error , que é responsável por erros na JVM.
Vale ressaltar que provavelmente nem são bugs de codificação, mas sim problemas que normalmente não dependem do desenvolvedor.
O que fazer com um erro
Ao capturar "erros", não é possível executar nenhuma ação no bloco catch , exceto logar , pois estamos falando de problemas na própria JVM.
O registro é bom: quando você recebe um erro de tempo de execução, pode consultar os logs, ver sua causa e saber o que corrigir.
Como você não sabe que tipo de erro pode obter ao escrever seu código, não faz sentido escrever um tipo específico no bloco catch . Usar a classe Error em si também não é a melhor solução, pois neste caso, você só pegará erros.
Assim, é melhor usar a classe Throwable , que pode capturar Error e Exception . Como isso se parece na prática?
Não é correto escrever um código como este: |
---|
|
Escrever código como este também não é bom: |
---|
|
Mas código como este está OK: |
---|
|
A segunda opção para lidar com erros é lançá -los mais alto após declarar uma cláusula throws no método. Essa técnica é usada quando seu código pode, teoricamente, lançar um erro e você deseja avisar a todos que possam usar seu código para que possam lidar adequadamente com o erro.
Erros comuns
Alguns dos erros mais populares são as classes OutOfMemoryError e StackOverflowError .
OutOfMemoryError geralmente aparece quando o programa não tem memória suficiente para criar objetos e o coletor de lixo não consegue acompanhar. O resultado é um OutOfMemoryError .
O Java não permite que você exclua objetos manualmente para evitar vazamentos de memória, mas você pode evitar o lixo para não sobrecarregar o coletor de lixo e não sobrecarregar a pilha.
Por exemplo, um código como este criará muito lixo na memória:
while (true) {
new Object();
}
O segundo erro sobre o qual quero falar é o StackOverflowError , que é lançado quando a pilha estoura. Como a pilha armazena principalmente variáveis locais, parâmetros e chamadas de método, a recursão (ou uma chamada de método recursiva) é uma causa muito comum desse erro:
public void foo() {
foo();
}
Para evitar problemas durante a execução do programa, os IDEs modernos geralmente alertam sobre chamar métodos recursivamente.
Você não pode corrigir um programa que gera Erros , mas pode escrever um código que não gere um erro e interrompa seu programa. Observe o que você faz com a memória, crie objetos com cuidado e chame os métodos corretamente. Se você fizer isso, terá menos problemas em seu código.
Diferença entre os tipos Error e Exception
Erro | Exceção |
---|---|
Não pode ser corrigido no bloco catch | Pode ser manipulado em um bloco catch |
Não ocorre em tempo de compilação | Pode ser capturado em tempo de compilação |
Problemas na JVM | Problemas na lógica do código |
Todos os erros estão desmarcados | marcado e desmarcado |
Você não pode escapar de exceções em Java, mas não deve ter medo delas. Você só precisa entender o que cada tipo representa e saber como lidar com isso. Isso é tudo por hoje! Vê você!
GO TO FULL VERSION