Java é uma linguagem de programação robustamente tipada, com foco em objetos, e amplamente utilizada para criar aplicações web, móveis e corporativas. Desenvolvida pela Sun Microsystems e atualmente sob propriedade da Oracle Corporation, Java conquistou grande popularidade devido à sua portabilidade, escalabilidade, confiabilidade e estabilidade.
Ao desenvolver programas em Java, o código-fonte passa inicialmente por um processo de compilação, sendo transformado em bytecode. Este bytecode é então interpretado pela Java Virtual Machine (JVM), que o converte em código de máquina, permitindo que o programa seja executado. Assim, Java é caracterizada como uma linguagem tanto compilada quanto interpretada.
A compilação envolve a análise completa do código-fonte e sua tradução para código de máquina de uma vez. Já o interpretador, por outro lado, converte o código-fonte em código de máquina linha por linha.
Durante a compilação, o compilador cria um registro de todos os identificadores utilizados no programa. Em Java, identificadores são nomes atribuídos aos diversos elementos do programa, como variáveis, classes, métodos, pacotes e interfaces.
Durante a compilação de um programa Java, erros podem surgir nesse processo, sendo conhecidos como erros de compilação ou erros de tempo de compilação. Tais erros impedem que o compilador Java gere o bytecode do programa com sucesso.
Erros de compilação, como o erro “Cannot Find Symbol”, impedem que seu programa seja compilado e podem ser causados por falhas de sintaxe, semântica ou estrutura no código-fonte.
Erro: Não É Possível Encontrar o Símbolo
Como mencionado, durante a compilação, o compilador Java cria uma lista de todos os identificadores utilizados no código, interpretando o significado de cada um. Se o compilador se deparar com um identificador desconhecido, ou seja, que ele não consegue identificar ou determinar sua função, o erro “Cannot Find Symbol” é gerado.
Esse erro é a forma do compilador informar que um identificador utilizado não é compreendido por ele, impossibilitando a determinação de sua finalidade no programa.
Isso pode acontecer quando o identificador não foi declarado, não está disponível no contexto em que está sendo usado ou não foi importado corretamente. A ocorrência do erro “Cannot Find Symbol” impede a compilação do código.
Causas do Erro: Não É Possível Encontrar o Símbolo

Dentre as causas comuns para o erro “Não é possível encontrar o símbolo”, destacam-se:
- Erros de digitação que levam a nomes de variáveis, métodos, classes ou pacotes com grafia incorreta. O uso inadequado de letras maiúsculas e minúsculas também pode causar esse erro, pois Java é sensível a casos.
- Uso de uma variável, método ou classe antes de sua declaração, ou fora do escopo onde foi declarada.
- A tentativa de instanciar uma classe sem utilizar a palavra-chave “new”.
- Ausência de instruções de importação ao tentar usar classes de outros pacotes. A não importação de uma classe antes de sua utilização também ocasionará este erro.
- Importação incorreta de pacotes.
Se o compilador detectar qualquer um desses erros em seu código, ele interromperá o processo de compilação e emitirá o erro “Cannot Find Symbol”.
Exemplos do Erro: Não É Possível Encontrar o Símbolo
A seguir, analisaremos exemplos de código que ilustram as diferentes causas do erro “Não é possível encontrar o símbolo” e como solucioná-lo.
#1. Erros de Digitação
Erros de digitação e uso incorreto de maiúsculas e minúsculas em nomes de variáveis, métodos, classes ou pacotes podem resultar no erro “Cannot Find Symbol”. Considere o código abaixo:
class Test {
public static void main(String[] args) {
int even_number = 4;
System.out.println(even_numbe); // Nome da variável digitado incorretamente
System.out.println(Even_number);// Uso incorreto de maiúsculas e minúsculas
int sum = addnumber(5, 20); // Nome do método digitado incorretamente e uso incorreto de maiúsculas e minúsculas
System.out.println(sum);
}
public static int addNumbers(int a, int b) {
int result = a + b;
return result;
}
}
O resultado da compilação desse código é apresentado abaixo:

Para corrigir os erros, certifique-se de utilizar os nomes corretos para variáveis e métodos. No exemplo, a variável “even_number” e o nome do método “addNumbers” foram digitados incorretamente e com uso inadequado de maiúsculas e minúsculas. A correção envolve utilizar “even_number” e “addNumbers”, como demonstrado a seguir:
class Test {
public static void main(String[] args) {
int even_number = 4;
System.out.println(even_number); // Nome da variável correto e com uso correto de maiúsculas e minúsculas
System.out.println(even_number); // Nome da variável correto e com uso correto de maiúsculas e minúsculas
int sum = addNumbers(5, 20); // Nome do método correto
System.out.println(sum);
}
public static int addNumbers(int a, int b) {
int result = a + b;
return result;
}
}
Saída:
4 4 25

#2. Variável Não Declarada
A utilização de variáveis não declaradas, o uso de variáveis antes de sua declaração, e a tentativa de acessar variáveis, métodos ou classes fora de seu escopo resultam no erro “Cannot Find Symbol”, conforme ilustrado abaixo:
class Test {
public static void main(String[] args) {
System.out.println(y); // 'y' não foi declarada
System.out.println(num); // 'num' usada antes da declaração
int num = 4; // declaração e inicialização de 'num'
if (num > 3) {
int x = 2;
};
System.out.println(x); // 'x' - usada fora do seu escopo
}
}
A compilação deste código resulta no seguinte:

Para corrigir este erro, declare todas as variáveis que você usa em seu programa e certifique-se de utilizá-las apenas após a declaração. No nosso exemplo, as variáveis ‘y’ e ‘num’ foram utilizadas antes de serem declaradas. Para corrigir, utilize-as após suas declarações.
A variável ‘x’ foi utilizada fora do escopo em que foi declarada. Para corrigir isso, utilize-a dentro do bloco ‘if’ onde foi declarada, como mostrado abaixo:
class Test {
public static void main(String[] args) {
String y = "Olá Mundo";
System.out.println(y); // 'y' - usada após a declaração
int num = 4;
System.out.println(num); // 'num' - usada após a declaração
if (num > 3) {
int x = 2;
System.out.println(x); // 'x' - usada dentro do escopo do 'if'
};
}
}
Saída:
Olá Mundo 4 2

#3. Variáveis, Métodos e Classes Fora do Escopo
A utilização de variáveis, métodos e classes fora do escopo em que foram declarados resulta no erro “Cannot Find Symbol”, como demonstrado no código a seguir:
class Test {
public static void main(String[] args) {
if (true) {
int number = 10;
}
System.out.println(number); // 'number' está fora do escopo
}
}
A compilação desse código gera o seguinte erro:

Para corrigir o erro, assegure-se de utilizar a variável ‘number’ dentro do escopo em que foi declarada. Neste caso, dentro do bloco ‘if’, conforme mostrado a seguir:
class Test {
public static void main(String[] args) {
if (true) {
int number = 10;
System.out.println(number); // 'number' - usada dentro do escopo do bloco 'if'
}
}
}
Saída:
10

#4. Instanciando uma Classe sem Utilizar a Palavra-Chave “new”
Java é uma linguagem orientada a objetos, permitindo a criação de objetos, também conhecidos como instâncias de classes. No entanto, se a instância for criada sem usar a palavra-chave “new”, o erro “Cannot Find Symbol” será gerado, conforme apresentado abaixo:
public class Car {
private String make;
private String model;
public Car(String make, String model) {
this.make = make;
this.model = model;
}
public String getMake() {
return make;
}
public String getModel() {
return model;
}
public static void main(String[] args) {
// Criação de instância da classe 'Car' sem usar 'new'
Car myCar = Car("Ford", "Fiesta");
System.out.println("Marca: " + myCar.getMake());
System.out.println("Modelo: " + myCar.getModel());
}
}
A compilação desse código resulta no seguinte erro:

Para corrigir o erro, utilize a palavra-chave “new” sempre que for criar objetos. Em Java, a criação de instâncias de uma classe requer a utilização da palavra-chave “new”. Portanto, para criar uma instância da classe ‘Car’, utilize “new Car()”, como apresentado a seguir:
public class Car {
private String make;
private String model;
public Car(String make, String model) {
this.make = make;
this.model = model;
}
public String getMake() {
return make;
}
public String getModel() {
return model;
}
public static void main(String[] args) {
// Instância de 'Car' criada corretamente usando 'new'
Car myCar = new Car("Ford", "Fiesta");
System.out.println("Marca: " + myCar.getMake());
System.out.println("Modelo: " + myCar.getModel());
}
}
Saída:
Marca: Ford Modelo: Fiesta

#5. Importação Ausente
A tentativa de utilizar uma classe presente em outro pacote sem importá-la resulta no erro “Cannot Find Symbol”. Observe o seguinte código:
class Test {
public static void main(String[] args) {
System.out.println("Olá, digite qualquer número");
// Importação ausente para a classe 'Scanner'
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
System.out.println("O número que você digitou é: " + number);
scanner.close();
}
}
O resultado da compilação deste código é:

A classe ‘Scanner’ é usada para obter dados de entrada do teclado em um programa Java. Para utilizá-la, é necessário importá-la para o arquivo desejado. A importação da classe ‘Scanner’ a torna disponível para uso, como demonstrado a seguir. A instrução de importação é a primeira linha do código abaixo:
import java.util.Scanner;
class Test {
public static void main(String[] args) {
System.out.println("Olá, digite qualquer número");
// Importação ausente para a classe 'Scanner'
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
System.out.println("O número que você digitou é: " + number);
scanner.close();
}
}
Saída:
Olá, digite qualquer número 45 O número que você digitou é: 45

#6. Importação Incorreta
Além de falhar na importação de um pacote necessário, importar o pacote errado também pode levar ao erro “Cannot Find Symbol”. Analise o código a seguir:
import java.util.Dates; // Importando o pacote errado - o correto é 'Date'
class Test {
public static void main(String[] args) {
Dates now = new Dates();
System.out.println(now);
}
}
A compilação desse código resulta nos seguintes erros:

Para corrigir os erros gerados pelo “Cannot Find Symbol”, verifique se você está importando o pacote correto. No código que gerou o erro, a classe importada foi ‘Dates’, mas não existe uma classe ‘Dates’ embutida. O nome correto é ‘Date’. Portanto, para remover o erro, importe ‘Date’ em vez de ‘Dates’, como mostrado a seguir:
import java.util.Date; // Importando o pacote correto - 'Date' e não 'Dates'
class Test {
public static void main(String[] args) {
Date now = new Date();
System.out.println(now);
}
}
Saída:
Thu Aug 17 12:02:12 EAT 2023

Impacto do Erro: Não É Possível Encontrar o Símbolo na Compilação
Por ser um erro de compilação, o impacto mais imediato do erro “Não é possível encontrar o símbolo” é a falha no processo de compilação. Quando o código Java está sendo compilado para bytecode, erros detectados no código-fonte resultam na interrupção do processo de compilação. Portanto, nenhum bytecode será gerado para a execução do programa.
Quando esses erros surgem, o próximo passo é depurar o código-fonte para identificar a causa dos erros e corrigi-los. Embora a depuração possa aprimorar o conhecimento sobre a linguagem, ela pode levar a atrasos no desenvolvimento. Além disso, a qualidade geral do código-fonte é comprometida por esses erros.
Conclusão
O erro “Cannot Find Symbol”, um erro muito comum, certamente será encontrado durante o desenvolvimento em Java. Felizmente, é também um erro fácil de evitar. O “Cannot Find Symbol” surge devido ao uso incorreto de identificadores. Para evitar esse erro, declare todas as suas variáveis, métodos e classes antes de utilizá-los.
Além disso, evite erros de digitação ao se referir aos identificadores e utilize-os dentro do escopo em que foram declarados. Por fim, se estiver utilizando pacotes ou classes externas em seu programa, importe os pacotes corretos antes de começar a usá-los.
Você também pode explorar o melhor software de monitoramento Java para empresas.