Erro Java “Símbolo não encontrado”: Soluções e exemplos práticos

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.