Errore del compilatore Java: inizio illegale dell'espressione

1. Panoramica

L '"inizio illegale dell'espressione" è un errore comune che potremmo incontrare in fase di compilazione.

In questo tutorial vedremo esempi che illustrano le principali cause di questo errore e come risolverlo.

2. Parentesi graffe mancanti

La mancanza di parentesi graffe può portare all'errore di "inizio di espressione illegale". Diamo prima un'occhiata a un esempio:

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

Se compiliamo la classe sopra:

$ 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 mancanza della parentesi graffa di chiusura di printSum () è la causa principale del problema.

La soluzione al problema è semplice: aggiungere la parentesi graffa di chiusura al metodo 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; } }

Prima di passare alla sezione successiva, esaminiamo l'errore del compilatore.

Il compilatore segnala che la settima riga sta causando l'errore di "inizio illegale dell'espressione". Sappiamo infatti che la causa principale del problema è nella sesta riga. Da questo esempio, apprendiamo che a volte gli errori del compilatore non puntano alla linea con la causa principale e avremo bisogno di correggere la sintassi nella riga precedente.

3. Modificatore di accesso all'interno del metodo

In Java, possiamo solo dichiarare variabili locali all'interno di un metodo o di un costruttore . Non possiamo usare alcun modificatore di accesso per le variabili locali all'interno di un metodo perché le loro accessibilità sono definite dall'ambito del metodo.

Se infrangiamo la regola e disponiamo di modificatori di accesso all'interno di un metodo, verrà generato l'errore di "inizio di espressione illegale".

Vediamolo in azione:

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

Se proviamo a compilare il codice sopra, vedremo l'errore di compilazione:

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

La rimozione del modificatore di accesso privato risolve facilmente il 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. Metodi annidati

Alcuni linguaggi di programmazione, come Python, supportano metodi annidati. Tuttavia, Java non supporta un metodo all'interno di un altro metodo.

Affronteremo l'errore del compilatore "inizio illegale dell'espressione" se creiamo metodi annidati:

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

Compiliamo il file sorgente sopra e vediamo cosa riporta il compilatore 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

Il compilatore Java segnala cinque errori di compilazione. In alcuni casi, un singolo errore può causare più errori durante la compilazione.

Identificare la causa principale è essenziale per noi per essere in grado di risolvere il problema. In questo esempio, il primo errore di "inizio illegale dell'espressione" è la causa principale.

Possiamo risolvere rapidamente il problema spostando il metodo calcSum () fuori dal metodo 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. carattere o stringa senza virgolette

Sappiamo che i valori letterali stringa dovrebbero essere racchiusi tra virgolette doppie, mentre i valori char dovrebbero essere citati utilizzando virgolette singole.

Se ci dimentichiamo di racchiuderli tra virgolette appropriate, il compilatore Java li tratterà come nomi di variabili .

Potremmo vedere l'errore "impossibile trovare il simbolo" se la "variabile" non è dichiarata.

Tuttavia, se ci dimentichiamo di virgolette due volte una stringa che non è un nome di variabile Java valido, il compilatore Java segnalerà l'errore di "inizio di espressione illegale" .

Vediamolo attraverso un esempio:

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

Ci siamo dimenticati di citare la stringa + all'interno della chiamata al metodo equals e + ovviamente non è un nome di variabile Java valido.

Ora proviamo a compilarlo:

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

La soluzione al problema è semplice: racchiudere i valori letterali stringa tra virgolette doppie:

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

In questo breve articolo, abbiamo parlato di cinque diversi scenari che genereranno l'errore di "inizio illegale dell'espressione".

La maggior parte delle volte, durante lo sviluppo di applicazioni Java, utilizzeremo un IDE che ci avverte quando vengono rilevati errori. Queste belle funzionalità IDE possono fare molto per proteggerci dall'affrontare questo errore.

Tuttavia, potremmo ancora riscontrare l'errore di tanto in tanto. Pertanto, una buona comprensione dell'errore ci aiuterà a individuare e correggere rapidamente l'errore.