Error del compilador de Java: inicio de expresión ilegal

1. Información general

El "inicio ilegal de la expresión" es un error común que podemos enfrentar en el momento de la compilación.

En este tutorial, veremos ejemplos que ilustran las principales causas de este error y cómo solucionarlo.

2. Faltan tirantes rizados

La falta de llaves puede dar lugar al error de "inicio de expresión ilegal". Primero veamos un ejemplo:

package com.baeldung; public class MissingCurlyBraces { public void printSum(int x, int y) { System.out.println("Calculation Result:" + calcSum(x, y)); public int calcSum(int x, int y) { return x + y; } }

Si compilamos la clase anterior:

$ javac MissingCurlyBraces.java MissingCurlyBraces.java:7: error: illegal start of expression public int calcSum(int x, int y) { ^ MissingCurlyBraces.java:7: error: ';' expected public int calcSum(int x, int y) { ..... 

La falta de la llave de cierre de printSum () es la causa principal del problema.

La solución al problema es simple: agregar la llave de cierre al método printSum () :

package com.baeldung; public class MissingCurlyBraces { public void printSum(int x, int y) { System.out.println("Calculation Result:" + calcSum(x, y)); } public int calcSum(int x, int y) { return x + y; } }

Antes de pasar a la siguiente sección, revisemos el error del compilador.

El compilador informa que la séptima línea está provocando el error de "inicio de expresión ilegal". De hecho, sabemos que la causa raíz del problema está en la sexta línea. De este ejemplo, aprendemos que a veces los errores del compilador no apuntan a la línea con la causa raíz , y necesitaremos corregir la sintaxis en la línea anterior.

3. Método interno del modificador de acceso

En Java, solo podemos declarar variables locales dentro de un método o constructor . No podemos usar ningún modificador de acceso para las variables locales dentro de un método porque sus accesibilidades están definidas por el alcance del método.

Si rompemos la regla y tenemos modificadores de acceso dentro de un método, se generará el error de “inicio de expresión ilegal”.

Veamos esto en acción:

package com.baeldung; public class AccessModifierInMethod { public void printSum(int x, int y) { private int sum = x + y; System.out.println("Calculation Result:" + sum); } }

Si intentamos compilar el código anterior, veremos el error de compilación:

$ javac AccessModifierInMethod.java AccessModifierInMethod.java:5: error: illegal start of expression private int sum = x + y; ^ 1 error

Eliminar el modificador de acceso privado resuelve fácilmente el problema:

package com.baeldung; public class AccessModifierInMethod { public void printSum(int x, int y) { int sum = x + y; System.out.println("Calculation Result:" + sum); } }

4. Métodos anidados

Algunos lenguajes de programación, como Python, admiten métodos anidados. Pero Java no admite un método dentro de otro método.

Enfrentaremos el error del compilador de "inicio de expresión ilegal" si creamos métodos anidados:

package com.baeldung; public class NestedMethod { public void printSum(int x, int y) { System.out.println("Calculation Result:" + calcSum(x, y)); public int calcSum ( int x, int y) { return x + y; } } } 

Compilemos el archivo fuente anterior y veamos qué informa el compilador de Java:

$ javac NestedMethod.java NestedMethod.java:6: error: illegal start of expression public int calcSum ( int x, int y) { ^ NestedMethod.java:6: error: ';' expected public int calcSum ( int x, int y) { ^ NestedMethod.java:6: error:  expected public int calcSum ( int x, int y) { ^ NestedMethod.java:6: error: not a statement public int calcSum ( int x, int y) { ^ NestedMethod.java:6: error: ';' expected public int calcSum ( int x, int y) { ^ 5 errors

El compilador de Java informa cinco errores de compilación. En algunos casos, un solo error puede causar varios errores adicionales durante el tiempo de compilación.

Identificar la causa raíz es fundamental para que podamos solucionar el problema. En este ejemplo, el primer error de “inicio de expresión ilegal” es la causa raíz.

Podemos resolver rápidamente el problema sacando el método calcSum () del método printSum () :

package com.baeldung; public class NestedMethod { public void printSum(int x, int y) { System.out.println("Calculation Result:" + calcSum(x, y)); } public int calcSum ( int x, int y) { return x + y; } } 

5. char o cadena sin comillas

Sabemos que los literales de cadena deben estar entre comillas dobles, mientras que los valores char deben estar entre comillas simples.

Si nos olvidamos de incluirlos entre las comillas adecuadas, el compilador de Java los tratará como nombres de variables .

Es posible que veamos el error "no se puede encontrar el símbolo" si la "variable" no está declarada.

Sin embargo, si olvidamos entre comillas dobles una cadena que no es un nombre de variable de Java válido, el compilador de Java informará el error de “inicio de expresión ilegal” .

Veámoslo a través de un ejemplo:

package com.baeldung; public class ForgetQuoting { public int calcSumOnly(int x, int y, String operation) { if (operation.equals(+)) { return x + y; } throw new UnsupportedOperationException("operation is not supported:" + operation); } } 

Olvidamos citar String + dentro de la llamada al método equals , y + obviamente no es un nombre de variable Java válido.

Ahora, intentemos compilarlo:

$ javac ForgetQuoting.java ForgetQuoting.java:5: error: illegal start of expression if (operation.equals(+)) { ^ 1 error 

La solución al problema es simple: envolver literales de cadena entre comillas dobles:

package com.baeldung; public class ForgetQuoting { public int calcSumOnly(int x, int y, String operation) { if (operation.equals("+")) { return x + y; } throw new UnsupportedOperationException("operation is not supported:" + operation); } } 

6. Conclusión

En este breve artículo, hablamos de cinco escenarios diferentes que generarán el error de “inicio ilegal de expresión”.

La mayoría de las veces, al desarrollar aplicaciones Java, usamos un IDE que nos advierte cuando se detectan errores. Esas características agradables de IDE pueden contribuir en gran medida a protegernos de este error.

Sin embargo, es posible que todavía encontremos el error de vez en cuando. Por lo tanto, una buena comprensión del error nos ayudará a localizarlo y corregirlo rápidamente.