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.