[Fixed] Como resolver o erro “Não é possível encontrar o símbolo” em Java

Java é uma linguagem de programação fortemente tipada, orientada a objetos e de uso geral para a criação de aplicativos da Web, móveis e corporativos. Java, desenvolvido pela Sun Microsystems e atualmente propriedade da Oracle Corporation, tornou-se uma linguagem de programação muito popular por causa de sua portabilidade, escalabilidade, confiabilidade e estabilidade.

Ao escrever programas usando Java, a linguagem de programação Java é que o código-fonte Java é primeiro compilado em bytecode. O bytecode é então interpretado pela Java Virtual Machine em código de máquina, permitindo assim que o programa Java seja executado. Portanto, Java é uma linguagem compilada e interpretada.

A compilação envolve a varredura de todo o código-fonte e a tradução em código de máquina de uma só vez. Um interpretador, por outro lado, converte o código-fonte em código de máquina uma linha por vez.

Durante a compilação, o compilador cria uma lista de todos os identificadores usados ​​no programa. Em Java, identificadores são nomes dados aos diferentes elementos do programa, como variáveis, classes, métodos, pacotes, interfaces, entre outros.

Quando um programa Java está sendo compilado, podem surgir erros durante o processo de compilação. Esses erros são conhecidos como erros de compilação ou erros de tempo de compilação. Erros de compilação impedem que o compilador Java gere com êxito o bytecode de um programa.

Erros de compilação impedem que seu programa seja compilado. Tais erros podem ser causados ​​por erros de sintaxe, semântica ou estrutural no código-fonte. Um exemplo de erro de compilação é o erro Cannot Find Symbol.

erro: não é possível encontrar o símbolo

Conforme observado anteriormente, durante a compilação, o compilador Java cria uma lista de todos os identificadores usados ​​no programa e descobre o que cada identificador significa. Se o compilador encontrar um identificador que não reconheça ou não puder dizer a que o identificador se refere, ocorrerá um erro de símbolo impossível de encontrar.

Um erro de símbolo impossível de encontrar é a maneira do compilador informar que você está usando um identificador que ele não consegue entender e, portanto, não consegue descobrir o que o identificador deve fazer.

Isso pode ocorrer porque o identificador que você está tentando usar não foi declarado, não está disponível no escopo em que você o está usando ou não foi importado corretamente. Um erro de símbolo não encontrado pode levar à falha na compilação.

Causas do erro: não é possível encontrar o símbolo

Algumas das possíveis causas do erro: não é possível encontrar o símbolo incluem:

  • Erros tipográficos levam a variáveis, métodos, classes ou nomes de pacotes com erros ortográficos. O uso de maiúsculas e minúsculas erradas também leva a esse erro, pois o Java diferencia maiúsculas de minúsculas.
  • Usando uma variável, método ou classe que não foi declarada ou usando-a antes de sua declaração real.
  • Usando variáveis, métodos ou classes fora do escopo em que foram declarados.
  • Criando uma instância de uma classe sem usar a nova palavra-chave
  • Instruções de importação ausentes ao tentar usar classes de outros pacotes. Falha ao importar uma classe que está em outro pacote antes de usá-lo também causará esse erro.
  • Importação de pacote incorreta.
  Como selecionar o dispositivo de inicialização no UEFI BIOS

Quando o compilador detectar qualquer um dos erros acima em seu código, ele interromperá a compilação e lançará o erro de símbolo não encontrado.

Exemplos de erro: não é possível encontrar o símbolo

Vamos dar uma olhada detalhada nos exemplos de código que mostram as diferentes causas do erro de símbolo não encontrado e como resolver o erro.

#1. Erros tipográficos

Variáveis, métodos, classes ou nomes de pacote com erros ortográficos e maiúsculas e minúsculas levam ao erro de símbolo impossível de encontrar. Considere o código abaixo:

class Test {
  public static void main(String[] args) {
    int even_number = 4;
    System.out.println(even_numbe); // misspelled variable name
    System.out.println(Even_number);// wrong case
    int sum = addnumber(5, 20); // misspelled method name, wrong case
    System.out.println(sum);
  }
  
  public static int addNumbers(int a, int b) {
    int result = a + b;
    return result;
  }
}

O resultado da compilação do código acima é mostrado abaixo:

Para corrigir os erros, verifique se você está usando o método correto e os nomes das variáveis. No exemplo, a variável even_number e o nome do método addNumbers foram digitados incorretamente e usaram maiúsculas e minúsculas erradas. Para corrigir esses erros, use a variável correta e o nome do método que é par_número e adicioneNumbers conforme mostrado abaixo:

class Test {
  public static void main(String[] args) {
    int even_number = 4;
    System.out.println(even_number); // Correct variable name with the right case
    System.out.println(even_number); // Correct variable name with the right case
    int sum = addNumbers(5, 20); // Correct method name
    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

Variáveis ​​não declaradas, o uso de variáveis ​​antes da declaração e o uso de variáveis, métodos e classes fora de seu escopo resultam no símbolo não encontrado, conforme mostrado abaixo:

class Test {
  public static void main(String[] args) {
    System.out.println(y); // y is undeclared
    System.out.println(num); // num used before its declaration
    int num = 4; // num's declaration and initialization
    if (num > 3) {
      int x = 2;
    };
    System.out.println(x); // x - used outside its scope
  }
}

O resultado da compilação deste código é mostrado abaixo:

Para corrigir esse erro, certifique-se de declarar todas as variáveis ​​que você usa em seu programa e só usá-las depois de declará-las. No nosso caso, as variáveis ​​y e num foram usadas antes de serem declaradas. Corrija este erro usando-os após sua declaração.

  O que é, como funciona e é seguro usar?

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 conforme a figura abaixo:

class Test {
  public static void main(String[] args) {
    String y = "Hello World";
    System.out.println(y); // y - used after it has been declared
    int num = 4; 
    System.out.println(num); // num - used after it has been declared
    
    if (num > 3) {
      int x = 2;
      System.out.println(x); // x - used within the scope of the if statement
    };
  }
}

Saída:

Hello World
4
2

#3. Variáveis, métodos e classes fora do escopo

O uso de variáveis, métodos e classes fora do escopo em que foram declarados resultará em um símbolo impossível de encontrar, conforme mostrado no código abaixo:

class Test {
  public static void main(String[] args) {
    if (true) {
      int number = 10;
    }
    System.out.println(number); // 'number' is out of scope
  }
}

A compilação desse código leva ao seguinte erro:

Para corrigir o erro, verifique se você está usando o número da variável dentro do escopo declarado. Isso está dentro do escopo do bloco if, conforme mostrado abaixo:

class Test {
  public static void main(String[] args) {
    if (true) {
      int number = 10;
      System.out.println(number); // number - used within the scope of the if block
    }
  }
}

Saída:

10

#4. Criando uma instância de uma classe sem usar a nova palavra-chave

Java é uma linguagem orientada a objetos e, portanto, você pode criar objetos também conhecidos como instâncias de classe em um programa Java. No entanto, se você fizer isso sem usar a nova palavra-chave, encontrará um símbolo de impossibilidade de localização, conforme mostrado 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) {
    // Creating an instance of the Car class without using new
    Car myCar = Car("Ford", "Fiesta");

    System.out.println("Make: " + myCar.getMake());
    System.out.println("Model: " + myCar.getModel());
  }
}

A compilação do código resulta em um erro conforme mostrado abaixo:

Para corrigir o erro, use a palavra-chave new sempre que estiver criando objetos. Para criar uma instância de uma classe em Java, você precisa usar a palavra-chave new. Para criar uma instância da classe Car, você deve usar new Car() conforme mostrado 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) {
    // Instance of Car created correctly by using the new keyword
    Car myCar = new Car("Ford", "Fiesta");

    System.out.println("Make: " + myCar.getMake());
    System.out.println("Model: " + myCar.getModel());
  }
}

Saída:

Make: Ford
Model: Fiesta

#5. Importação ausente

Tentar usar uma classe encontrada em outro pacote sem importá-la leva ao erro de símbolo não encontrado. Veja o código abaixo:

class Test {
  public static void main(String[] args) {
    System.out.println("Hello, enter any number");
    // Missing import for the Scanner class
    Scanner scanner = new Scanner(System.in);
    int number = scanner.nextInt();
    System.out.println("The number you entered is: " + number);
    scanner.close();
  }
}

O resultado da compilação do código é mostrado abaixo:

  Descubra filmes estrelando seu ator favorito e muito mais

A classe Scanner é usada para obter a entrada do usuário do teclado em um programa Java. Para usá-lo, você precisa primeiro importá-lo para o arquivo que deseja usá-lo. A importação da classe scanner a torna disponível para uso conforme mostrado. A instrução de importação é a primeira linha no código abaixo:

import java.util.Scanner;
class Test {
  public static void main(String[] args) {
    System.out.println("Hello, enter any number");
    // Missing import for the Scanner class
    Scanner scanner = new Scanner(System.in);
    int number = scanner.nextInt();
    System.out.println("The number you entered is: " + number);
    scanner.close();
  }
}

Saída:

Hello, enter any number
45
The number you entered is: 45

#6. Importação incorreta

Além da falha ao importar um pacote que você deseja usar, importar o pacote errado também pode levar a um símbolo de não localização. Considere o código abaixo:

import java.util.Dates; // importing the wrong package - correct package is Date
class Test {
  public static void main(String[] args) {
    Dates now = new Dates();
        System.out.println(now);
  }
}

A compilação do código resulta nos seguintes erros:

Para corrigir os erros gerados pelos erros de símbolos não encontrados, verifique se você está importando o pacote correto. No código que gerou o erro, a classe que foi importada era Dates. No entanto, não há nenhuma classe embutida chamada Dates. O nome correto é Data. Portanto, para remover o erro, importe Data e não Datas conforme mostrado abaixo:

import java.util.Date; // importing the correct package - Date and not 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

Sendo um erro de compilação, o impacto mais imediato do erro de símbolo não encontrado é uma falha no processo de compilação. Quando o Java está sendo compilado para bytecode, os erros detectados no código-fonte resultam na falha do processo de compilação. Portanto, nenhum bytecode será gerado para ser utilizado na execução do programa.

Quando esses erros surgem, a causa óbvia da ação é começar a depurar seu código-fonte para descobrir o que está causando os erros e corrigi-los. Embora a depuração possa ter o benefício de ajudá-lo a se familiarizar melhor com um idioma, ela pode levar a atrasos no desenvolvimento. Além disso, a qualidade geral do código-fonte é afetada devido a erros no código-fonte.

Conclusão

Eles não conseguem encontrar erros de símbolo, um erro muito comum, e você certamente os encontrará ao escrever o código Java. Felizmente, também é um erro muito fácil de evitar. Não é possível encontrar resultados de erro de símbolo devido ao uso incorreto de identificadores. Portanto, para evitar o erro, certifique-se de declarar todas as suas variáveis, métodos e classes antes de usá-los.

Além disso, certifique-se de não cometer nenhum erro de digitação ao referenciar os identificadores que está usando em seu programa e use todos os seus identificadores dentro do escopo que você os declarou. Finalmente, caso você esteja usando algum pacote ou classes externas em seu programa, certifique-se de importar os pacotes corretos para seu programa antes de começar a usá-los.

Você também pode explorar o melhor software de monitoramento Java para empresas.