Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Desarrollo Última actualización: 25 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

Java es un lenguaje de programación de propósito general, orientado a objetos y fuertemente tipado para crear aplicaciones web, móviles y empresariales. Java, desarrollado por Sun Microsystems y actualmente propiedad de Oracle Corporation, se ha convertido en un lenguaje de programación muy popular por su portabilidad, escalabilidad, fiabilidad y estabilidad.

Cuando se escriben programas con Java, el lenguaje de programación Java consiste en que el código fuente se compila primero en bytecode. A continuación, la máquina virtual Java interpreta el bytecode en código máquina, lo que permite ejecutar el programa Java. Por lo tanto, Java es tanto un lenguaje compilado como interpretado.

La compilación consiste en escanear todo el código fuente y traducirlo a código máquina de una sola vez. Un intérprete, por otro lado, convierte el código fuente en código máquina línea a línea.

Young female programmer working in office

Durante la compilación, el compilador crea una lista de todos los identificadores utilizados en el programa. En Java, los identificadores son nombres que se dan a los distintos elementos del programa, como variables, clases, métodos, paquetes e interfaces, entre otros.

Cuando se está compilando un programa Java, pueden surgir errores durante el proceso de compilación. Dichos errores se conocen como errores de compilación o errores en tiempo de compilación. Los errores de compilación impiden que el compilador de Java genere correctamente el código de bytes de un programa.

Los errores de compilación impiden que se compile su programa. Estos errores pueden estar causados por errores sintácticos, semánticos o estructurales en el código fuente. Un ejemplo de error de compilación es el Error de símbolo no encontrado.

error: no se puede encontrar el símbolo

Como se ha señalado anteriormente, durante la compilación, el compilador de Java crea una lista de todos los identificadores que se utilizan en el programa y averigua qué significa cada identificador. Si el compilador encuentra un identificador que no reconoce o no puede decir a qué se refiere el identificador, se produce un error de símbolo no encontrable.

Un error de símbolo no encontrable es la forma que tiene el compilador de decirle que está utilizando un identificador que no puede entender y, por tanto, no puede averiguar qué se supone que debe hacer el identificador.

Esto puede deberse a que el identificador que está intentando utilizar no ha sido declarado, no está disponible en el ámbito en el que lo está utilizando o no ha sido importado correctamente. Un error de no se puede encontrar el símbolo puede provocar un fallo en la compilación.

Causas del error: no se puede encontrar el símbolo

Common-Cause-For-Error-0x80004005-

Algunas de las causas potenciales del error: no se puede encontrar el símbolo incluyen:

  • Los errores tipográficos conducen a variables, métodos, clases o nombres de paquetes mal escritos. El uso de mayúsculas y minúsculas incorrectas también conduce a este error, ya que Java distingue entre mayúsculas y minúsculas.
  • Utilizar una variable, método o clase que no ha sido declarada o utilizarla antes de su declaración real.
  • Utilizar variables, métodos o clases fuera del ámbito en el que han sido declarados.
  • Creación de una instancia de una clase sin utilizar la palabra clave new
  • Omisión de declaraciones de importación al intentar utilizar clases de otros paquetes. No importar una clase que está en otro paquete antes de utilizarla también provocará este error.
  • Importación incorrecta de paquetes.

Cuando el compilador detecte cualquiera de los errores anteriores en su código, detendrá la compilación y lanzará el error no puede encontrar el símbolo.

Ejemplos de error: no se puede encontrar el símbolo

Echemos un vistazo detallado a los ejemplos de código que muestran las diferentes causas del error: cannot find symbol y cómo resolver el error.

#1. Errores tipográficos

Las variables, métodos, clases o nombres de paquetes mal escritos y los casos erróneos provocan el error de símbolo no encontrable. Considere el siguiente código:

class Test {
 public static void main(String[] args) {
 int numero_par = 4;
 System.out.println(numero_par); // nombre de variable mal escrito
 System.out.println(Número_par);// caso incorrecto
 int suma = addnumber(5, 20); // nombre de método mal escrito, caso incorrecto
 System.out.println(suma);
 }
  
 public static int addNumbers(int a, int b) {
 int resultado = a b;
 return resultado;
 }
}

A continuación se muestra el resultado de compilar el código anterior:

Typographical-Mistakes

Para corregir los errores, asegúrese de que está utilizando el método y los nombres de variable correctos. En el ejemplo, la variable even_number y el nombre del método addNumbers estaban mal escritos y utilizaban los casos incorrectos. Para corregir estos errores, utilice la variable y el nombre de método correctos que son even_number , y addNumbers como se muestra a continuación:

class Test {
 public static void main(String[] args) {
 int numero_par = 4;
 System.out.println(numero_par); // Nombre de variable correcto con el caso correcto
 System.out.println(numero_par); // Nombre de variable correcto con el caso correcto
 int suma = sumaNumeros(5, 20); // Nombre de método correcto
 System.out.println(suma);
 }

 public static int sumaNumeros(int a, int b) {
 int resultado = a b;
 return resultado;
 }
}

Salida:

4
4
25
Corrected-Typos

#2. Variable no declarada

Las variables no declaradas, el uso de variables antes de la declaración y el uso de variables, métodos y clases fuera de su ámbito dan como resultado que no se pueda encontrar el símbolo como se muestra a continuación:

class Test {
 public static void main(String[] args) {
 System.out.println(y); // y no está declarada
 System.out.println(num); // num utilizado antes de su declaración
 int num = 4; // declaración e inicialización de num
 if (num > 3) {
 int x = 2;
 };
 System.out.println(x); // x - utilizado fuera de su ámbito
 }
}

El resultado de compilar este código se muestra a continuación:

Undeclared-variable

Para corregir este error, asegúrese de declarar todas las variables que utilice en su programa y sólo utilícelas después de declararlas. En nuestro caso, las variables y y num se utilizaron antes de ser declaradas. Corrija este error utilizándolas después de su declaración.

La variable x se utilizó fuera del ámbito en el que fue declarada. Para corregirlo, utilícela dentro del bloque if en el que ha sido declarada como se muestra a continuación:

class Test {
 public static void main(String[] args) {
 String y = "Hola Mundo";
 System.out.println(y); // y - utilizada después de haber sido declarada
 int num = 4; 
 System.out.println(num); // num - utilizado después de haber sido declarado
    
 if (num > 3) {
 int x = 2;
 System.out.println(x); // x - utilizado dentro del ámbito de la sentencia if
 };
 }
}

Salida:

Hola Mundo
4
2
Corrected-undeclared-variable

#3. Variables, métodos y clases fuera de ámbito

El uso de variables, métodos y clases fuera del ámbito en el que han sido declarados dará lugar a un símbolo de no encontrar como se muestra en el código siguiente:

class Test {
 public static void main(String[] args) {
 if (true) {
 int number = 10;
 }
   System.out.println(number); // 'number' está fuera de alcance
 }
}

Al compilar este código se produce el siguiente error:

Out-of-scope

Para corregir el error, asegúrese de que está utilizando la variable number dentro del ámbito en el que ha sido declarada. Es decir, dentro del ámbito del bloque if como se muestra a continuación:

class Test {
 public static void main(String[] args) {
 if (true) {
 int number = 10;
 System.out.println(number); // number - usado dentro del ámbito del bloque if
 }
 }
}

Salida:

10
Corrected-Scope

#4. Creación de una instancia de una clase sin utilizar la palabra clave new

Java es un lenguaje orientado a objetos y, por tanto, puede crear objetos también conocidos como instancias de clases en un programa Java. Sin embargo, si lo hace sin utilizar la palabra clave new, se encontrará con un símbolo de no encontrar como se muestra a continuación:

public class Coche {
 private String marca;
 private String modelo;

 public Coche(String marca, String modelo) {
 this.marca = marca;
 this.model = model;
 }

 public String getMake() {
 return make;
 }

 public String getModel() {
 return model;
 }

 public static void main(String[] args) {
 // Crear una instancia de la clase Coche sin utilizar new
 Coche myCar = Coche("Ford", "Fiesta");

 System.out.println("Marca: " myCar.getMake());
 System.out.println("Modelo: " miCoche.getModel());
 }
}

Al compilar el código se produce un error como el que se muestra a continuación:

No-new-keyword

Para corregir el error, utilice la palabra clave new siempre que vaya a crear objetos. Para crear una instancia de una clase en Java, debe utilizar la palabra clave new. Así, para crear una instancia de la clase Coche deberá utilizar new Coche() como se muestra a continuación:

public class Coche {
 private String marca;
 private String modelo;

 public Coche(String marca, String modelo) {
 this.marca = marca;
 this.model = model;
 }

 public String getMake() {
 return make;
 }

 public String getModel() {
 return model;
 }

 public static void main(String[] args) {
 // Instancia de Coche creada correctamente utilizando la palabra clave new
 Coche myCar = new Coche("Ford", "Fiesta");

 System.out.println("Marca: " myCar.getMake());
 System.out.println("Modelo: " miCoche.getModel());
 }
}

Salida:

Marca: Ford
Modelo: Fiesta
corrected-no-new-keyword

#5. Falta Importar

Intentar utilizar una clase que se encuentra en otro paquete sin importarla conduce al error cannot find symbol not. Vea el código siguiente:

class Prueba {
 public static void main(String[] args) {
 System.out.println("Hola, introduzca cualquier número");
 // Falta importar la clase Scanner
 Scanner scanner = new Scanner(System.in);
 int number = scanner.nextInt();
 System.out.println("El número que ha introducido es: " number);
 scanner.close();
 }
}

A continuación se muestra el resultado de compilar el código:

Missing-Import

La clase Scanner se utiliza para obtener la entrada del usuario desde el teclado en un programa Java. Para utilizarla, primero debe importarla en el archivo en el que desea utilizarla. Importar la clase escáner hace que esté disponible para su uso como se muestra. La declaración de importación es la primera línea del código siguiente:

import java.util.Scanner;
class Test {
 public static void main(String[] args) {
 System.out.println("Hola, introduzca cualquier número");
 // Falta importar la clase Scanner
 Scanner scanner = new Scanner(System.in);
 int number = scanner.nextInt();
 System.out.println("El número que ha introducido es: " number);
 scanner.close();
 }
}

Salida:

Hola, introduzca cualquier número
45
El número que ha introducido es: 45
Corrected-Missing-Import

#6. Importación incorrecta

Aparte del fallo al importar un paquete que desea utilizar, importar el paquete incorrecto también puede provocar un símbolo de no encontrar. Considere el código siguiente

import java.util.Dates; // importando el paquete incorrecto - el paquete correcto es Date
class Test {
 public static void main(String[] args) {
 Dates now = new Dates();
 System.out.println(now);
 }
}

Al compilar el código se producen los siguientes errores:

Incorrect-Import

Para corregir los errores de no encontrar símbolo generados, asegúrese de que está importando el paquete correcto. En el código que generó un error, la clase importada era Dates. Sin embargo, no existe ninguna clase incorporada llamada Fechas. El nombre correcto es Fechas. Por lo tanto, para eliminar el error, importe Date y no Dates como se muestra a continuación:

import java.util.Date; // importando el paquete correcto - Date y no Dates
class Test {
 public static void main(String[] args) {
 Date now = new Date();
 System.out.println(now);
 }
}

Salida:

Jue ago 17 12:02:12 EAT 2023
Corrected-Incorrect-Import

Impacto del error: no se puede encontrar el símbolo en Compilación

Al tratarse de un error de compilación, el impacto más inmediato del error no puede encontrar el símbolo es un fallo en el proceso de compilación. Cuando se está compilando Java a bytecode, los errores detectados en el código fuente provocan el fallo del proceso de compilación. Por lo tanto, no se generará ningún bytecode para ser utilizado en la ejecución del programa.

Cuando surgen este tipo de errores, la causa obvia de acción es empezar a depurar su código fuente para encontrar la causa de los errores y corregirlos. Aunque la depuración puede tener la ventaja de ayudarle a familiarizarse mejor con un lenguaje, puede provocar retrasos en el desarrollo. Además, la calidad general del código fuente se ve afectada debido a los errores en el código fuente.

Conclusión

No pueden encontrar errores de símbolos, un error muy común, y es muy probable que se encuentre con ellos mientras escribe código Java. Por suerte, también es un error muy fácil de evitar. El error no puede encontrar el símbolo es el resultado del uso incorrecto de los identificadores. Por lo tanto, para evitar el error, asegúrese de declarar todas sus variables, métodos y clases antes de utilizarlos.

Además, asegúrese de no cometer ningún error tipográfico al hacer referencia a los identificadores que está utilizando en su programa, y utilice todos sus identificadores dentro del ámbito en el que los ha declarado. Por último, en caso de que vaya a utilizar algún paquete o clases externas en su programa, asegúrese de importar los paquetes adecuados en su programa antes de empezar a utilizarlos.

También puede explorar el mejor software de supervisión de Java para empresas.

  • Collins Kariuki
    Autor
    Collins Kariuki es desarrollador de software y escritor técnico para Geekflare. Tiene más de cuatro años de experiencia en el desarrollo de software, una formación en Informática y también ha escrito para Argot, Daily Nation y el periódico Business Daily.
  • Narendra Mohan Mittal
    Editor

    Narendra Mohan Mittal es un versátil y experimentado estratega de marca digital y editor de contenidos con más de 12 años de experiencia. Es medalla de oro en M-Tech y B-Tech en Informática e Ingeniería.


    Actualmente,... Seguir leyendo

Gracias a nuestros patrocinadores
Más lecturas sobre desarrollo
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba Monday
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder