Erros Comuns
Guia Completo: Erros Mais Comuns em Java para Iniciantes
Olá, futuro(a) programador(a) Java! 👋
Erros são normais e fazem parte do aprendizado. Vamos conhecer os erros mais comuns que você vai encontrar, entender por que eles acontecem e como resolvê-los.
1. NullPointerException
O que significa: Você tentou usar um objeto que não foi criado (está "vazio" - null).
Código que causa o erro:
public class ExemploNull {
public static void main(String[] args) {
String texto = null;
System.out.println(texto.length()); // Erro! texto é null
}
}
Como corrigir:
public class ExemploNull {
public static void main(String[] args) {
String texto = "Olá, mundo!";
System.out.println(texto.length()); // Funciona!
// Ou verifique se não é null
if (texto != null) {
System.out.println(texto.length());
}
}
}
Dica: Sempre inicialize suas variáveis e verifique com if (objeto != null) antes de usar.
2. ArrayIndexOutOfBoundsException
O que significa: Você tentou acessar uma posição que não existe no array.
Código que causa o erro:
public class ExemploArray {
public static void main(String[] args) {
int[] numeros = {10, 20, 30};
System.out.println(numeros[3]); // Erro! Só existe posições 0, 1 e 2
}
}
Como corrigir:
public class ExemploArray {
public static void main(String[] args) {
int[] numeros = {10, 20, 30};
// Acesse apenas posições válidas
System.out.println(numeros[2]); // Funciona!
// Use o tamanho do array para controlar
for (int i = 0; i < numeros.length; i++) {
System.out.println(numeros[i]);
}
}
}
Dica: Lembre-se: arrays começam no índice 0! O último índice é array.length - 1.
3. NumberFormatException
O que significa: Você tentou converter uma string que não é um número válido.
Código que causa o erro:
public class ExemploNumero {
public static void main(String[] args) {
String numero = "abc";
int valor = Integer.parseInt(numero); // Erro! "abc" não é número
}
}
Como corrigir:
public class ExemploNumero {
public static void main(String[] args) {
String numero = "123";
int valor = Integer.parseInt(numero); // Funciona!
// Ou trate a exceção
try {
numero = "abc";
valor = Integer.parseInt(numero);
} catch (NumberFormatException e) {
System.out.println("Não é um número válido!");
}
}
}
Dica: Sempre valide se a string contém apenas dígitos antes de converter.
4. ArithmeticException (Divisão por zero)
O que significa: Você tentou dividir um número por zero.
Código que causa o erro:
public class ExemploDivisao {
public static void main(String[] args) {
int a = 10;
int b = 0;
int resultado = a / b; // Erro! Divisão por zero
}
}
Como corrigir:
public class ExemploDivisao {
public static void main(String[] args) {
int a = 10;
int b = 0;
if (b != 0) {
int resultado = a / b;
System.out.println(resultado);
} else {
System.out.println("Não pode dividir por zero!");
}
}
}
Dica: Sempre verifique se o divisor é diferente de zero antes de dividir.
5. ClassCastException
O que significa: Você tentou converter um objeto para um tipo que ele não é.
Código que causa o erro:
public class ExemploCast {
public static void main(String[] args) {
Object objeto = "Texto";
Integer numero = (Integer) objeto; // Erro! String não é Integer
}
}
Como corrigir:
public class ExemploCast {
public static void main(String[] args) {
Object objeto = "Texto";
if (objeto instanceof String) {
String texto = (String) objeto; // Funciona!
System.out.println(texto);
}
// Ou use o tipo correto
String texto = (String) objeto; // Funciona!
}
}
Dica: Use instanceof para verificar o tipo antes de fazer o cast.
6. StackOverflowError
O que significa: A pilha de chamadas de métodos estourou, geralmente por recursão infinita.
Código que causa o erro:
public class ExemploRecursao {
public static void main(String[] args) {
metodoInfinito(); // Vai estourar a pilha!
}
static void metodoInfinito() {
System.out.println("Chamando...");
metodoInfinito(); // Chama a si mesmo para sempre
}
}
Como corrigir:
public class ExemploRecursao {
public static void main(String[] args) {
metodoComLimite(5);
}
static void metodoComLimite(int vezes) {
if (vezes > 0) {
System.out.println("Chamando... " + vezes);
metodoComLimite(vezes - 1); // Para quando vezes chegar a 0
}
}
}
Dica: Toda recursão precisa de uma condição de parada!
7. Incompatible Types
O que significa: Você está tentando atribuir um valor de um tipo a uma variável de outro tipo incompatível.
Código que causa o erro:
public class ExemploTipos {
public static void main(String[] args) {
int numero = "Olá"; // Erro! String não pode virar int
String texto = 123; // Erro! int não pode virar String
}
}
Como corrigir:
public class ExemploTipos {
public static void main(String[] args) {
int numero = 123; // Correto
String texto = "Olá"; // Correto
// Para converter, use métodos apropriados
String textoNumero = String.valueOf(123); // "123"
int numeroTexto = Integer.parseInt("123"); // 123
}
}
Dica: Respeite os tipos das variáveis! Use conversões explícitas quando necessário.
8. Cannot Find Symbol
O que significa: O compilador não encontrou uma variável, método ou classe que você está tentando usar.
Código que causa o erro:
public class ExemploSymbol {
public static void main(String[] args) {
System.out.println(mensagem); // Erro! mensagem não foi declarada
metodoQualquer(); // Erro! método não existe
}
}
Como corrigir:
public class ExemploSymbol {
public static void main(String[] args) {
String mensagem = "Olá!"; // Declare a variável
System.out.println(mensagem); // Funciona!
meuMetodo(); // Chame métodos que existem
}
static void meuMetodo() {
System.out.println("Método existe!");
}
}
Dica: Verifique se você declarou a variável, importou a classe ou criou o método antes de usar.
9. Reached End of File While Parsing
O que significa: O arquivo terminou de forma inesperada, geralmente faltando uma chave }.
Código que causa o erro:
public class ExemploParsing {
public static void main(String[] args) {
System.out.println("Olá");
// Faltou fechar a chave da classe!
Como corrigir:
public class ExemploParsing {
public static void main(String[] args) {
System.out.println("Olá");
} // Fechou o método
} // Fechou a classe
Dica: Use a indentação correta e sempre verifique se todas as chaves foram fechadas.
10. Missing Return Statement
O que significa: Um método que deveria retornar um valor não tem o comando return.
Código que causa o erro:
public class ExemploReturn {
static int calcularSoma(int a, int b) {
int resultado = a + b;
// Faltou: return resultado;
}
}
Como corrigir:
public class ExemploReturn {
static int calcularSoma(int a, int b) {
int resultado = a + b;
return resultado; // Agora retorna o valor
}
// Outra forma mais simples
static int calcularSoma2(int a, int b) {
return a + b;
}
}
Dica: Todo método que não é void precisa ter um return com o valor correto.
11. Unclosed String Literal
O que significa: Você esqueceu de fechar as aspas de uma string.
Código que causa o erro:
public class ExemploString {
public static void main(String[] args) {
String texto = "Olá, mundo; // Faltou fechar as aspas
}
}
Como corrigir:
public class ExemploString {
public static void main(String[] args) {
String texto = "Olá, mundo"; // Aspas fechadas corretamente
// Para strings com aspas dentro, use escape
String comAspas = "Ele disse: \"Olá!\"";
}
}
Dica: Sempre verifique se suas strings começam e terminam com aspas duplas.
12. Illegal Start of Expression
O que significa: O compilador encontrou algo inesperado no início de uma expressão.
Código que causa o erro:
public class ExemploExpressao {
public static void main(String[] args) {
if (true) {
System.out.println("Verdadeiro")
} // Faltou ponto e vírgula no println
}
}
Como corrigir:
public class ExemploExpressao {
public static void main(String[] args) {
if (true) {
System.out.println("Verdadeiro"); // Ponto e vírgula adicionado
}
// Outro exemplo comum
int numero = 10
System.out.println(numero); // Faltou ; no 10
}
}
Dica: Preste atenção nos pontos e vírgula e na estrutura correta das expressões.
Dicas Finais para Evitar Erros
- Leia a mensagem de erro - Ela sempre diz qual linha e o que está errado
- Use um IDE - Eclipse, IntelliJ ou VS Code mostram erros em tempo real
- Teste pequenas partes - Vá testando seu código aos poucos
- Mantenha a indentação - Código organizado é mais fácil de debugar
- Não desista! - Todo programador passa por esses erros
Lembre-se: errar é aprender! Cada erro que você resolver vai te tornar um(a) programador(a) melhor. 🚀