Erro "Could not find or load main class" em Java: guia para iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

«Could not find or load main class»: o medo familiar de todo iniciante em Java

\n\n

Você acabou de começar a estudar Java, escreveu seu primeiro HelloWorld.java, e com o coração na mão apertou Enter no terminal… E em vez da saudação tão esperada, viu uma mensagem fria:

\n\n
Error: Could not find or load main class HelloWorld\nCaused by: java.lang.ClassNotFoundException: HelloWorld
\n\n

Familiar? Se sim, você não está sozinho. Essa pergunta no Stack Overflow já acumulou milhões de visualizações e é a recordista absoluta entre os erros de iniciantes em Java. A boa notícia: a causa quase sempre é simples, e a solução leva 30 segundos. A má notícia: se você não entender por que isso aconteceu, o erro vai te perseguir de novo e de novo.

\n\n

Neste artigo, vamos analisar todas as causas possíveis do erro «Could not find or load main class» com exemplos práticos. Você vai aprender não apenas a corrigir o erro, mas a entender como o Java procura pela sua classe. Vamos lá!

\n\n

Resumo: o que a JVM está tentando dizer?

\n\n

Quando você digita java NomeDaClasse, a Máquina Virtual Java (JVM) recebe a ordem: «Encontre a classe com esse nome e execute o método main dela». Se a JVM não encontra o arquivo .class com o nome certo ou não encontra o método main correto dentro dele, ela entra em pânico e exibe esse erro.

\n\n

É importante entender: o Java trabalha com bytecode (arquivos .class), e não com código-fonte (.java). Primeiro você compila o .java em .class com o comando javac, e depois executa o .class com o comando java. Se algo der errado na segunda etapa, você recebe o temido erro.

\n\n

Cenário 1: Você esqueceu de compilar o arquivo

\n\n

A causa mais comum, especialmente para quem acabou de abrir o terminal. Você digita:

\n\n
java HelloWorld
\n\n

Mas antes não executou:

\n\n
javac HelloWorld.java
\n\n

Sem a compilação, o arquivo HelloWorld.class simplesmente não existe. A JVM tenta honestamente encontrá-lo, mas não consegue e exibe o erro.

\n\n

Como verificar?

\n
    \n
  • Olhe na pasta atual: existe o arquivo HelloWorld.class?
  • \n
  • Se só existe HelloWorld.java — compile.
  • \n
  • Se não existe nenhum dos dois — verifique se você está no diretório correto.
  • \n
\n\n

Cenário 2: Erro de digitação no nome da classe (maiúsculas/minúsculas importam!)

\n\n

Java é uma linguagem de tipagem forte e sensível a maiúsculas e minúsculas. Se sua classe se chama HelloWorld, mas você digita:

\n\n
java helloworld\njava HelloWorld.class\njava HelloWorld.java
\n\n

— a JVM não vai te entender. O nome da classe deve coincidir com o nome do arquivo exatamente. Sim, HelloWorld e helloworld são nomes diferentes para a JVM.

\n\n
\n 🔥 Dica de ouro: Nunca escreva .class ou .java no comando java. Use apenas o nome puro da classe!\n
\n\n

Cenário 3: Problemas com package (a armadilha mais traiçoeira)

\n\n

Assim que você começa a usar pacotes (package), as regras do jogo mudam. Suponha que você tenha o arquivo:

\n\n
// Arquivo: src/com/pythonlib/MyApp.java\npackage com.pythonlib;\n\npublic class MyApp {\n    public static void main(String[] args) {\n        System.out.println("Olá do PythonLib!");\n    }\n}
\n\n

Muitos iniciantes fazem assim:

\n\n
cd src\njavac com/pythonlib/MyApp.java   // compilação bem-sucedida\njava MyApp                        // ERRO!
\n\n

Por quê? Porque o nome completo da classe agora é com.pythonlib.MyApp, e não apenas MyApp. A JVM procura a classe pelo nome completo.

Blogs

Book Recommendations