Identificador de error esperado en Java

Suraj P 12 octubre 2023
  1. Comprender el error <identificador> esperado en Java
  2. Ejemplo 1: cuando a los parámetros de un método les falta el tipo de datos o el nombre
  3. Ejemplo 2: cuando las declaraciones de expresión están fuera de lugar
  4. Ejemplo 3: cuando las sentencias de declaración están fuera de lugar
  5. Conclusión
Identificador de error esperado en Java

En este artículo, aprenderemos sobre el error <identificador> esperado de Java.

Comprender el error <identificador> esperado en Java

El <identificador> esperado es el error de tiempo de compilación de Java más común al que se enfrentan los programadores novatos. Este error se produce cuando un parámetro de método no tiene declarado un tipo de datos o un nombre, o cuando se escribe una instrucción de expresión fuera de un método, un constructor o un bloque de inicialización.

En Java, un identificador es una secuencia de uno o más caracteres donde el primer carácter debe ser una letra o $ o _, y los siguientes caracteres pueden ser letras, dígitos, $ o _.

Estos identificadores se utilizan para nombrar una variable, un método, una clase, un paquete, una interfaz, etc.

Cuando se compila el código Java, la fase inicial implica el análisis léxico del programa. Aquí, el programa se clasifica en tokens, y todos los tokens, incluidos los identificadores, se verifican con un conjunto de reglas gramaticales.

Y siempre que, según las reglas gramaticales, se espera un identificador, pero no está presente, y se encuentra algo más en su lugar, el compilador genera el error <identificador> esperado. Los corchetes angulares aquí significan una referencia a los objetos simbólicos.

Veamos algunos ejemplos para entenderlo mejor ahora.

Ejemplo 1: cuando a los parámetros de un método les falta el tipo de datos o el nombre

Los parámetros dentro de un método deben tener datos seguidos del nombre de la variable, que es un identificador; perder cualquiera de ellos inevitablemente generará el error <identificador> esperado.

  1. Faltan datos del parámetro

    public class Demo {
      public static int square(x) {
        return x * x;
      }
    
      public static void main(String[] args) {
        System.out.println(square(10));
      }
    }
    

    Producción:

    square.java:9: error: <identifier> expected
    public static int square(x) {
            	        	  ^
    1 error
    

    Si observamos el error anterior, vemos que a la variable x le falta el tipo de dato. Si le damos el tipo de datos para ello, funcionará correctamente.

    public class Demo {
      public static int square(int x) {
        return x * x;
      }
    
      public static void main(String[] args) {
        System.out.println(square(10));
      }
    }
    

    Producción:

    100
    
  2. El tipo de datos del parámetro es el identificador; aquí falta el nombre de la variable.

    public class Demo {
      public static int square(int) {
        return x * x;
      }
    
      public static void main(String[] args) {
        System.out.println(square(10));
      }
    }
    

    Producción:

    square.java:9: error: <identifier> expected
    public static int square(int) {
            	        	   ^
    1 error
    

    Si observamos el error anterior, podemos ver claramente que especificamos el tipo de datos pero no adjuntamos ningún nombre de variable.

    public class Demo {
      public static int square(int x) {
        return x * x;
      }
    
      public static void main(String[] args) {
        System.out.println(square(10));
      }
    }
    

    Producción:

    100
    

Ejemplo 2: cuando las declaraciones de expresión están fuera de lugar

El compilador genera un error cuando se escribe una declaración de expresión fuera de un método, un constructor o un bloque de inicialización <identificador> esperado.

Código de ejemplo:

public class Demo {
  private String name;
  name = "Naruto";
  System.out.println(name);
}

Producción :

Demo.java:9: error: <identifier> expected
  name = "Naruto";
      ^
Demo.java:10: error: <identifier> expected
  System.out.println(name);
                    ^
Demo.java:10: error: <identifier> expected
  System.out.println(name);
                        ^
3 errors

Si observamos el error anterior, el error ocurre porque las declaraciones no están encerradas dentro de una función o un constructor. Escribamos estas sentencias dentro de un método llamado print.

public class Demo {
  private String name;

  public void print() {
    name = "Naruto";
    System.out.println(name);
  }

  public static void main(String[] args) {
    Demo obj = new Demo();
    obj.print();
  }
}

Producción :

Naruto

Ejemplo 3: cuando las sentencias de declaración están fuera de lugar

Esto es raro pero no inaudito cuando se trabaja con declaraciones de probar con recursos. Todas estas declaraciones requieren que cualquier recurso que se pueda cerrar se declare inmediatamente después de la palabra clave try.

Si la variable de recurso se declara fuera de la instrucción try-with-resources, el compilador podría generar el error <identificador> esperado (como compilador a compilador, esto puede variar).

Código de ejemplo: aquí, el recurso que se puede cerrar es BufferedReader.

import java.io.*;

public class Demo {
  public static void main(String[] args) {
    StringBuilder obj = new StringBuilder();
    BufferedReader br = null;

    try (br = new BufferedReader(new InputStreamReader(System.in))) {
      String lines = "";
      while (!(lines = br.readLine()).isBlank()) {
        obj.append(lines);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

Producción :

Demo.java:13: error: <identifier> expected
        try (br = new BufferedReader(new InputStreamReader(System.in))) {
              ^
1 error

El error se resolverá si declaramos el BufferedReader obj dentro del bloque try.

import java.io.*;

public class Demo {
  public static void main(String[] args) {
    StringBuilder obj = new StringBuilder();

    try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
      String lines = "";
      while (!(lines = br.readLine()).isBlank()) {
        obj.append(lines);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

Conclusión

En este artículo, aprendimos por qué el compilador generó el error <identificador> esperado y cómo es el error de tiempo de compilación más común que enfrentan los novatos. También vimos diferentes ejemplos analizando los casos en los que se planteó este error.

Autor: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

Artículo relacionado - Java Error