Erreur du compilateur Java: début incorrect de l'expression

1. Vue d'ensemble

Le «début d'expression illégal» est une erreur courante à laquelle nous pouvons être confrontés au moment de la compilation.

Dans ce didacticiel, nous verrons des exemples qui illustrent les principales causes de cette erreur et comment y remédier.

2. Bretelles bouclées manquantes

Des accolades manquantes peuvent entraîner l'erreur de «début d'expression illégal». Jetons d'abord un coup d'œil à un exemple:

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 nous compilons la classe ci-dessus:

$ 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) { ..... 

L'absence de l'accolade fermante de printSum () est la cause première du problème.

La solution au problème est simple - ajouter l'accolade fermante à la méthode 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; } }

Avant de passer à la section suivante, passons en revue l'erreur du compilateur.

Le compilateur signale que la 7ème ligne est à l'origine de l'erreur «début d'expression illégal». En fait, nous savons que la cause première du problème se trouve dans la 6ème ligne. À partir de cet exemple, nous apprenons que parfois les erreurs du compilateur ne pointent pas vers la ligne avec la cause racine , et nous devrons corriger la syntaxe de la ligne précédente.

3. Méthode d'accès au modificateur intérieur

En Java, nous ne pouvons déclarer des variables locales qu'à l'intérieur d'une méthode ou d'un constructeur . Nous ne pouvons utiliser aucun modificateur d'accès pour les variables locales à l'intérieur d'une méthode car leurs accessibilités sont définies par la portée de la méthode.

Si nous enfreignons la règle et avons des modificateurs d'accès à l'intérieur d'une méthode, l'erreur «début d'expression illégal» sera déclenchée.

Voyons cela en action:

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 nous essayons de compiler le code ci-dessus, nous verrons l'erreur de compilation:

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

La suppression du modificateur d'accès privé résout facilement le problème:

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éthodes imbriquées

Certains langages de programmation, tels que Python, prennent en charge les méthodes imbriquées. Mais, Java ne prend pas en charge une méthode dans une autre méthode.

Nous ferons face à l'erreur du compilateur «début illégal d'expression» si nous créons des méthodes imbriquées:

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; } } } 

Compilons le fichier source ci-dessus et voyons ce que le compilateur Java rapporte:

$ 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

Le compilateur Java signale cinq erreurs de compilation. Dans certains cas, une seule erreur peut entraîner plusieurs autres erreurs pendant la compilation.

Identifier la cause première est essentiel pour que nous puissions résoudre le problème. Dans cet exemple, la première erreur de «début d'expression illégal» est la cause première.

Nous pouvons rapidement résoudre le problème en déplaçant la méthode calcSum () hors de la méthode 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 ou chaîne sans guillemets

Nous savons que les littéraux de chaîne doivent être placés entre guillemets doubles, tandis que les valeurs char doivent être entre guillemets simples.

Si nous oublions de les mettre entre les guillemets appropriés, le compilateur Java les traitera comme des noms de variables .

Nous pouvons voir l'erreur «Impossible de trouver le symbole» si la «variable» n'est pas déclarée.

Cependant, si nous oublions de double-guillemet une chaîne qui n'est pas un nom de variable Java valide, le compilateur Java signalera l'erreur «début illégal d'expression» .

Jetons un coup d'œil à travers un exemple:

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); } } 

Nous avons oublié de citer le String + à l'intérieur de l'appel à la méthode equals , et + n'est évidemment pas un nom de variable Java valide.

Maintenant, essayons de le compiler:

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

La solution au problème est simple - encapsuler les littéraux String entre guillemets doubles:

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. Conclusion

Dans ce court article, nous avons parlé de cinq scénarios différents qui soulèveront l'erreur de «début illégal d'expression».

La plupart du temps, lors du développement d'applications Java, nous utiliserons un IDE qui nous avertit lorsque des erreurs sont détectées. Ces fonctionnalités IDE intéressantes peuvent contribuer grandement à nous protéger de cette erreur.

Cependant, nous pouvons toujours rencontrer l'erreur de temps en temps. Par conséquent, une bonne compréhension de l'erreur nous aidera à localiser et à corriger rapidement l'erreur.