Pogreška Java Compilera: nelegalan početak izraza

1. Pregled

"Ilegalni početak izražavanja" česta je pogreška s kojom se možemo suočiti u vrijeme sastavljanja.

U ovom uputstvu vidjet ćemo primjere koji ilustriraju glavne uzroke ove pogreške i kako je ispraviti.

2. Nedostaju kovrčave zagrade

Nedostatak kovrčavih zagrada može dovesti do pogreške "ilegalni početak izražavanja". Pogledajmo prvo primjer:

paket com.baeldung; javna klasa MissingCurlyBraces {javna void printSum (int x, int y) {System.out.println ("Rezultat izračuna:" + calcSum (x, y)); javni int calcSum (int x, int y) {return x + y; }}

Ako kompajliramo gornju klasu:

$ javac MissingCurlyBraces.java MissingCurlyBraces.java:7: pogreška: nelegalan početak izraza public int calcSum (int x, int y) {^ MissingCurlyBraces.java:7: pogreška: ';' očekivani javni int calcSum (int x, int y) {..... 

Nedostaje završna kovrčava zagrada od printSum () je osnovni uzrok problema.

Popravak problema je jednostavan - dodavanjem zaključne kovrčave zagrade na printSum () metoda:

paket com.baeldung; javna klasa MissingCurlyBraces {javna void printSum (int x, int y) {System.out.println ("Rezultat izračuna:" + calcSum (x, y)); } public int calcSum (int x, int y) {return x + y; }}

Prije nego što prijeđemo na sljedeći odjeljak, pregledajmo pogrešku kompajlera.

Prevoditelj izvještava da 7. redak uzrokuje pogrešku "ilegalni početak izražavanja". Zapravo znamo da je osnovni uzrok problema u 6. retku. Iz ovog primjera to saznajemo ponekad pogreške kompajlera ne upućuju na crtu s osnovnim uzrokom, a sintaksu ćemo morati popraviti u prethodnom retku.

3. Pristup modifikatoru pristupa unutar

U Javi, možemo samo deklarirati lokalne varijable unutar metode ili konstruktora. Ne možemo koristiti bilo koji modifikator pristupa za lokalne varijable unutar metode jer su njihove pristupačnosti definirane opsegom metode.

Ako prekršimo pravilo i imamo modifikatore pristupa unutar metode, pojavit će se pogreška "ilegalni početak izražavanja".

Pogledajmo ovo na djelu:

paket com.baeldung; javna klasa AccessModifierInMethod {javna praznina printSum (int x, int y) {private int sum = x + y; System.out.println ("Rezultat izračuna:" + zbroj); }}

Ako pokušamo sastaviti gornji kod, vidjet ćemo pogrešku kompilacije:

$ javac AccessModifierInMethod.java AccessModifierInMethod.java:5: pogreška: nelegalan početak izraza private int sum = x + y; ^ 1 pogreška

Uklanjanje datoteke privatni modifikator pristupa lako rješava problem:

paket com.baeldung; javna klasa AccessModifierInMethod {javna praznina printSum (int x, int y) {int sum = x + y; System.out.println ("Rezultat izračuna:" + zbroj); }}

4. Ugniježđene metode

Neki programski jezici, poput Pythona, podržavaju ugniježđene metode. Ali, Java ne podržava metodu unutar druge metode.

Suočit ćemo se s pogreškom kompajlera "ilegalni početak izražavanja" ako stvorimo ugniježđene metode:

paket com.baeldung; javna klasa NestedMethod {public void printSum (int x, int y) {System.out.println ("Rezultat izračuna:" + calcSum (x, y)); javni int calcSum (int x, int y) {return x + y; }}} 

Sastavimo gornju izvornu datoteku i pogledajmo što Java kompajler izvještava:

$ javac NestedMethod.java NestedMethod.java:6: pogreška: nelegalan početak izraza public int calcSum (int x, int y) {^ NestedMethod.java:6: pogreška: ';' očekivani javni int calcSum (int x, int y) {^ NestedMethod.java:6: pogreška: očekuje se javni int calcSum (int x, int y) {^ NestedMethod.java:6: pogreška: nije iskaz public int calcSum (int x, int y) {^ NestedMethod.java:6: pogreška: ';' očekivane javne int calcSum (int x, int y) {^ 5 pogrešaka

Java kompajler prijavljuje pet pogrešaka kompilacije. U nekim slučajevima jedna pogreška može uzrokovati više daljnjih pogrešaka tijekom vremena sastavljanja.

Prepoznavanje osnovnog uzroka ključno je za nas da bismo mogli riješiti problem. U ovom je primjeru prva pogreška "nezakonitog početka izraza" glavni uzrok.

Problem možemo brzo riješiti pomicanjem calcSum () metoda iz printSum () metoda:

paket com.baeldung; javna klasa NestedMethod {public void printSum (int x, int y) {System.out.println ("Rezultat izračuna:" + calcSum (x, y)); } public int calcSum (int x, int y) {return x + y; }} 

5. ugljen ili Niz Bez navodnika

Mi to znamo Niz doslovce treba umotati u dvostruke navodnike, dok ugljen vrijednosti treba navoditi pomoću navodnika.

Ako ih zaboravimo priložiti u odgovarajuće citate, Java kompajler će ih tretirati kao imena varijabli.

Možda ćemo vidjeti pogrešku "ne mogu pronaći simbol" ako "varijabla" nije deklarirana.

Međutim, ako zaboravimo dvostruko navoditi a Niz to nije valjano ime Java varijable, Java prevodilac će prijaviti pogrešku "ilegalni početak izraza".

Pogledajmo kroz primjer:

paket com.baeldung; javna klasa ForgetQuoting {public int calcSumOnly (int x, int y, String operation) {if (operation.equals (+)) {return x + y; } baci novi UnsupportedOperationException ("operacija nije podržana:" + operacija); }} 

Zaboravili smo citirati Niz+ unutar poziva na jednako metoda i + očito nije valjano ime Java varijable.

Pokušajmo sada sastaviti:

$ javac ForgetQuoting.java ForgetQuoting.java:5: pogreška: nelegalan početak izraza if (operation.equals (+)) {^ 1 pogreška 

Rješenje problema je jednostavno - omatanje Niz literal u dvostrukim navodnicima:

paket com.baeldung; javna klasa ForgetQuoting {public int calcSumOnly (int x, int y, String operation) {if (operation.equals ("+")) {return x + y; } baci novi UnsupportedOperationException ("operacija nije podržana:" + operacija); }} 

6. Zaključak

U ovom kratkom članku govorili smo o pet različitih scenarija koji će pokrenuti pogrešku "ilegalni početak izražavanja".

Većinu vremena, prilikom razvijanja Java aplikacija, koristit ćemo IDE koji nas upozorava kad se otkriju pogreške. Te lijepe IDE značajke mogu uvelike pomoći u zaštiti od suočavanja s ovom pogreškom.

Međutim, povremeno se još uvijek možemo susresti s pogreškom. Stoga će nam dobro razumijevanje pogreške pomoći da brzo pronađemo i popravimo pogrešku.