Java-compilatiefout: ongeldige start van expressie

1. Overzicht

De "illegale start van expressie" is een veel voorkomende fout waarmee we te maken kunnen krijgen tijdens het compileren.

In deze zelfstudie zien we voorbeelden die de belangrijkste oorzaken van deze fout illustreren en hoe u deze kunt verhelpen.

2. Ontbrekende accolades

Ontbrekende accolades kunnen leiden tot de fout "illegaal begin van expressie". Laten we eerst een voorbeeld bekijken:

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

Als we de bovenstaande klasse compileren:

$ javac MissingCurlyBraces.java MissingCurlyBraces.java:7: fout: illegale start van expressie public int calcSum (int x, int y) {^ MissingCurlyBraces.java:7: error: ';' verwachte openbare int calcSum (int x, int y) {..... 

De sluitende accolade van ontbreekt printSum () is de hoofdoorzaak van het probleem.

De oplossing voor het probleem is eenvoudig: het toevoegen van de sluitende accolade aan het printSum () methode:

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

Laten we, voordat we naar de volgende sectie gaan, de compilerfout bekijken.

De compiler meldt dat de 7e regel de fout "illegale start van expressie" veroorzaakt. In feite weten we dat de hoofdoorzaak van het probleem in de zesde regel ligt. Uit dit voorbeeld leren we dat soms verwijzen de compileerfouten niet naar de regel met de hoofdoorzaak, en we zullen de syntaxis in de vorige regel moeten corrigeren.

3. Toegang tot Modifier Inside Method

In Java, we kunnen alleen lokale variabelen binnen een methode of constructor declareren. We kunnen geen enkele toegangsmodificator gebruiken voor lokale variabelen binnen een methode, omdat hun toegankelijkheid wordt bepaald door het bereik van de methode.

Als we de regel overtreden en toegangsmodificatoren binnen een methode hebben, zal de fout "illegale start van expressie" worden veroorzaakt.

Laten we dit in actie zien:

pakket com.baeldung; publieke klasse AccessModifierInMethod {public void printSum (int x, int y) {private int sum = x + y; System.out.println ("Berekeningsresultaat:" + som); }}

Als we proberen de bovenstaande code te compileren, zien we de compilatiefout:

$ javac AccessModifierInMethod.java AccessModifierInMethod.java:5: fout: illegale start van expressie private int sum = x + y; ^ 1 fout

Het verwijderen van het privaat access modifier lost het probleem eenvoudig op:

pakket com.baeldung; openbare klasse AccessModifierInMethod {public void printSum (int x, int y) {int sum = x + y; System.out.println ("Berekeningsresultaat:" + som); }}

4. Geneste methoden

Sommige programmeertalen, zoals Python, ondersteunen geneste methoden. Maar, Java ondersteunt geen methode binnen een andere methode.

We zullen de compilatiefout "illegale start van expressie" onder ogen zien als we geneste methoden maken:

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

Laten we het bovenstaande bronbestand compileren en kijken wat de Java-compiler rapporteert:

$ javac NestedMethod.java NestedMethod.java:6: fout: illegale start van expressie public int calcSum (int x, int y) {^ NestedMethod.java:6: error: ';' verwachte openbare int calcSum (int x, int y) {^ NestedMethod.java:6: fout: verwachte openbare int calcSum (int x, int y) {^ NestedMethod.java:6: fout: geen instructie public int calcSum (int x, int y) {^ NestedMethod.java:6: error: ';' verwachte openbare int calcSum (int x, int y) {^ 5 fouten

De Java-compiler meldt vijf compilatiefouten. In sommige gevallen kan een enkele fout meerdere fouten veroorzaken tijdens het compileren.

Het identificeren van de hoofdoorzaak is essentieel voor ons om het probleem op te kunnen lossen. In dit voorbeeld is de eerste fout "illegale start van expressie" de hoofdoorzaak.

We kunnen het probleem snel oplossen door de calcSom () methode uit de printSum () methode:

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

5. char of Draad Zonder citaten

We weten dat Draad letterlijke tekens moeten tussen dubbele aanhalingstekens worden geplaatst, while char waarden moeten worden geciteerd met enkele aanhalingstekens.

Als we vergeten deze tussen de juiste aanhalingstekens te plaatsen, de Java-compiler behandelt ze als variabelenamen.

Mogelijk zien we de fout "kan symbool niet vinden" als de "variabele" niet is gedeclareerd.

Echter, als we vergeten een dubbel aan te halen Draad dat geen geldige Java-variabelenaam is, zal de Java-compiler de fout "illegale start van expressie" rapporteren.

Laten we het eens bekijken aan de hand van een voorbeeld:

pakket com.baeldung; openbare klasse ForgetQuoting {public int calcSumOnly (int x, int y, String-bewerking) {if (operation.equals (+)) {return x + y; } throw new UnsupportedOperationException ("bewerking wordt niet ondersteund:" + bewerking); }} 

We zijn vergeten de Draad+ binnen de oproep naar de is gelijk aan methode, en + is duidelijk geen geldige Java-variabelenaam.

Laten we het nu proberen te compileren:

$ javac ForgetQuoting.java ForgetQuoting.java:5: fout: ongeldige start van expressie if (operation.equals (+)) {^ 1 fout 

De oplossing voor het probleem is simpel: inpakken Draad letterlijke tussen dubbele aanhalingstekens:

pakket com.baeldung; openbare klasse ForgetQuoting {openbare int calcSumOnly (int x, int y, String-bewerking) {if (operation.equals ("+")) {return x + y; } throw new UnsupportedOperationException ("bewerking wordt niet ondersteund:" + bewerking); }} 

6. Conclusie

In dit korte artikel hebben we het gehad over vijf verschillende scenario's die de fout "illegaal begin van meningsuiting" naar voren zullen brengen.

Meestal gebruiken we bij het ontwikkelen van Java-applicaties een IDE die ons waarschuwt als er fouten worden gedetecteerd. Die leuke IDE-functies kunnen ons een lange weg helpen om deze fout onder ogen te zien.

Het is echter mogelijk dat we de fout van tijd tot tijd nog steeds tegenkomen. Daarom zal een goed begrip van de fout ons helpen om de fout snel te lokaliseren en op te lossen.