Java Compiler Error: ulovlig start av uttrykk

1. Oversikt

Den "ulovlige uttrykksstarten" er en vanlig feil vi kan møte i kompileringstiden.

I denne opplæringen ser vi eksempler som illustrerer hovedårsakene til denne feilen og hvordan du løser den.

2. Manglende krøller

Manglende krøller kan føre til feilen "ulovlig start på uttrykk". La oss ta en titt på et eksempel først:

pakke com.baeldung; offentlig klasse MissingCurlyBraces {public void printSum (int x, int y) {System.out.println ("Beregningsresultat:" + calcSum (x, y)); public int calcSum (int x, int y) {return x + y; }}

Hvis vi sammenstiller ovennevnte klasse:

$ javac MissingCurlyBraces.java MissingCurlyBraces.java:7: feil: ulovlig start av uttrykk public int calcSum (int x, int y) {^ MissingCurlyBraces.java:7: error: ';' forventet offentlig int calcSum (int x, int y) {..... 

Mangler den avsluttende krøllbøylen til printSum () er årsaken til problemet.

Løsningen på problemet er enkel - å legge den lukkende krøllbøylen til printSum () metode:

pakke com.baeldung; offentlig klasse MissingCurlyBraces {public void printSum (int x, int y) {System.out.println ("Beregningsresultat:" + calcSum (x, y)); } public int calcSum (int x, int y) {return x + y; }}

Før vi går videre til neste avsnitt, la oss se på kompilatorfeilen.

Kompilatoren rapporterer at den 7. linjen forårsaker feilen "ulovlig start på uttrykk". Vi vet faktisk at årsaken til problemet er i sjette linje. Fra dette eksemplet lærer vi det noen ganger peker kompilatorfeilene ikke mot linjen med grunnårsaken, og vi må fikse syntaksen i forrige linje.

3. Tilgang Modifier Inside Method

I Java, vi kan bare erklære lokale variabler i en metode eller konstruktør. Vi kan ikke bruke noen tilgangsmodifikator for lokale variabler i en metode fordi tilgjengeligheten deres er definert av metodens omfang.

Hvis vi bryter regelen og har tilgangsmodifikatorer inne i en metode, vil feilen "ulovlig start på uttrykk" heves.

La oss se dette i aksjon:

pakke com.baeldung; offentlig klasse AccessModifierInMethod {public void printSum (int x, int y) {private int sum = x + y; System.out.println ("Beregningsresultat:" + sum); }}

Hvis vi prøver å kompilere koden ovenfor, ser vi kompileringsfeilen:

$ javac AccessModifierInMethod.java AccessModifierInMethod.java:5: feil: ulovlig start på uttrykk privat int sum = x + y; ^ 1 feil

Fjerne privat tilgangsmodifikator løser enkelt problemet:

pakke com.baeldung; offentlig klasse AccessModifierInMethod {public void printSum (int x, int y) {int sum = x + y; System.out.println ("Beregningsresultat:" + sum); }}

4. Nestede metoder

Noen programmeringsspråk, for eksempel Python, støtter nestede metoder. Men, Java støtter ikke en metode i en annen metode.

Vi møter kompilatorfeilen "ulovlig start på uttrykk" hvis vi lager nestede metoder:

pakke com.baeldung; offentlig klasse NestedMethod {public void printSum (int x, int y) {System.out.println ("Beregningsresultat:" + calcSum (x, y)); public int calcSum (int x, int y) {return x + y; }}} 

La oss kompilere kildefilen ovenfor og se hva Java-kompilatoren rapporterer:

$ javac NestedMethod.java NestedMethod.java:6: feil: ulovlig start av uttrykk public int calcSum (int x, int y) {^ NestedMethod.java:6: error: ';' forventet offentlig int calcSum (int x, int y) {^ NestedMethod.java:6: feil: forventet offentlig int calcSum (int x, int y) {^ NestedMethod.java:6: feil: ikke en uttalelse public int calcSum (int x, int y) {^ NestedMethod.java:6: feil: ';' forventet offentlig int calcSum (int x, int y) {^ 5 feil

Java-kompilatoren rapporterer fem kompileringsfeil. I noen tilfeller kan en enkelt feil forårsake flere ytterligere feil i løpet av kompileringstiden.

Å identifisere årsaken er viktig for at vi skal kunne løse problemet. I dette eksemplet er den første feilen "ulovlig start på uttrykk" grunnårsaken.

Vi kan raskt løse problemet ved å flytte calcSum () metoden ut av printSum () metode:

pakke com.baeldung; offentlig klasse NestedMethod {public void printSum (int x, int y) {System.out.println ("Beregningsresultat:" + calcSum (x, y)); } public int calcSum (int x, int y) {return x + y; }} 

5. røye eller String Uten sitater

Vi vet det String bokstavene bør pakkes inn i doble anførselstegn, mens røye verdier bør siteres ved hjelp av enkelt anførselstegn.

Hvis vi glemmer å legge ved disse i de riktige tilbudene, Java-kompilatoren behandler dem som variabelnavn.

Vi kan se feilen "kan ikke finne symbol" hvis "variabelen" ikke blir deklarert.

Derimot, hvis vi glemmer å dobbel sitere a String som ikke er et gyldig Java-variabelnavn, rapporterer Java-kompilatoren feilen "ulovlig start på uttrykk".

La oss se på det gjennom et eksempel:

pakke com.baeldung; offentlig klasse ForgetQuoting {public int calcSumOnly (int x, int y, String operation) {if (operation.equals (+)) {return x + y; } kast ny UnsupportedOperationException ("operasjon støttes ikke:" + operasjon); }} 

Vi glemte å sitere String+ inne i samtalen til er lik metode, og + er åpenbart ikke et gyldig Java-variabelnavn.

La oss nå prøve å kompilere det:

$ javac ForgetQuoting.java ForgetQuoting.java:5: feil: ulovlig start av uttrykk hvis (operation.equals (+)) {^ 1 feil 

Løsningen på problemet er enkel - innpakning String bokstaver i to anførselstegn:

pakke com.baeldung; offentlig klasse ForgetQuoting {public int calcSumOnly (int x, int y, String operation) {if (operation.equals ("+")) {return x + y; } kast ny UnsupportedOperationException ("operasjon støttes ikke:" + operasjon); }} 

6. Konklusjon

I denne korte artikkelen snakket vi om fem forskjellige scenarier som vil heve feilen "ulovlig uttrykksstart".

Når vi utvikler Java-applikasjoner, bruker vi vanligvis en IDE som advarer oss når feil oppdages. Disse fine IDE-funksjonene kan gå langt for å beskytte oss mot denne feilen.

Imidlertid kan vi fremdeles støte på feilen fra tid til annen. Derfor vil en god forståelse av feilen hjelpe oss med å raskt finne og fikse feilen.