Chyba kompilátora Java: nelegálny začiatok výrazu

1. Prehľad

„Nezákonný začiatok výrazu“ je častou chybou, s ktorou sa môžeme stretnúť v čase kompilácie.

V tejto príručke uvidíme príklady, ktoré ilustrujú hlavné príčiny tejto chyby a spôsoby ich riešenia.

2. Chýbajúce zložené zátvorky

Chýbajúce zložené zátvorky môžu viesť k chybe „nezákonný začiatok výrazu“. Najprv sa pozrime na príklad:

balík com.baeldung; verejná trieda MissingCurlyBraces {public void printSum (int x, int y) {System.out.println ("Výsledok výpočtu:" + calcSum (x, y)); public int calcSum (int x, int y) {return x + y; }}

Ak zostavíme vyššie uvedenú triedu:

$ javac MissingCurlyBraces.java MissingCurlyBraces.java:7: chyba: nelegálny začiatok výrazu public int calcSum (int x, int y) {^ MissingCurlyBraces.java:7: error: ';' očakávaný verejný int calcSum (int x, int y) {..... 

Chýba zatváracia zložená zátvorka printSum () je hlavnou príčinou problému.

Oprava problému je jednoduchá - pridanie zatváracej zloženej zátvorky do printSum () metóda:

balík com.baeldung; verejná trieda MissingCurlyBraces {public void printSum (int x, int y) {System.out.println ("Výsledok výpočtu:" + calcSum (x, y)); } public int calcSum (int x, int y) {return x + y; }}

Predtým, ako prejdeme k ďalšej časti, skontrolujme chybu kompilátora.

Kompilátor hlási, že 7. riadok spôsobuje chybu „nelegálny začiatok výrazu“. V skutočnosti vieme, že hlavná príčina problému je v 6. riadku. Z tohto príkladu sa to dozvedáme niekedy chyby kompilátora neukazujú na riadok s hlavnou príčinou, a budeme musieť opraviť syntax v predchádzajúcom riadku.

3. Vnútorná metóda modifikátora prístupu

V Jave môžeme deklarovať iba lokálne premenné vo vnútri metódy alebo konštruktora. Nemôžeme použiť žiadny modifikátor prístupu pre lokálne premenné vo vnútri metódy, pretože ich prístupy sú definované rozsahom metódy.

Ak pravidlo porušíme a budeme mať v metóde modifikátory prístupu, zobrazí sa chyba „nelegálny začiatok výrazu“.

Uvidíme v akcii:

balík com.baeldung; public class AccessModifierInMethod {public void printSum (int x, int y) {private int sum = x + y; System.out.println ("Výsledok výpočtu:" + suma); }}

Ak sa pokúsime kompilovať vyššie uvedený kód, zobrazí sa nám chyba kompilácie:

$ javac AccessModifierInMethod.java AccessModifierInMethod.java:5: chyba: nelegálny začiatok výrazu private int sum = x + y; ^ 1 chyba

Odstraňuje sa súkromné modifikátor prístupu problém ľahko vyrieši:

balík com.baeldung; verejná trieda AccessModifierInMethod {public void printSum (int x, int y) {int sum = x + y; System.out.println ("Výsledok výpočtu:" + suma); }}

4. Vnorené metódy

Niektoré programovacie jazyky, napríklad Python, podporujú vnorené metódy. Ale, Java nepodporuje metódu vnútri inej metódy.

Ak vytvoríme vnorené metódy, čelíme chybe kompilátora „nezákonný začiatok výrazu“:

balík com.baeldung; verejná trieda NestedMethod {public void printSum (int x, int y) {System.out.println ("Výsledok výpočtu:" + calcSum (x, y)); public int calcSum (int x, int y) {return x + y; }}} 

Poďme zostaviť vyššie uvedený zdrojový súbor a pozrime sa, čo hlási kompilátor Java:

$ javac NestedMethod.java NestedMethod.java:6: chyba: nelegálny začiatok výrazu public int calcSum (int x, int y) {^ NestedMethod.java:6: error: ';' očekávané verejné int calcSum (int x, int y) {^ NestedMethod.java:6: chyba: očakávané verejné int calcSum (int x, int y) {^ NestedMethod.java:6: chyba: nie vyhlásenie verejné int calcSum (int x, int y) {^ NestedMethod.java:6: error: ';' Očakávané verejné int calcSum (int x, int y) {^ 5 chýb

Kompilátor Java hlási päť chýb kompilácie. V niektorých prípadoch môže jedna chyba spôsobiť počas kompilácie ďalšie ďalšie chyby.

Identifikácia hlavnej príčiny je nevyhnutná na to, aby sme mohli problém vyriešiť. V tomto príklade je hlavnou príčinou prvá chyba „nelegálneho začiatku výrazu“.

Problém môžeme rýchlo vyriešiť presunutím calcSum () metóda z printSum () metóda:

balík com.baeldung; verejná trieda NestedMethod {public void printSum (int x, int y) {System.out.println ("Výsledok výpočtu:" + calcSum (x, y)); } public int calcSum (int x, int y) {return x + y; }} 

5. char alebo String Bez úvodzoviek

My to vieme String literály by mali byť zabalené do úvodzoviek, zatiaľ čo char hodnoty by sa mali citovať pomocou jednoduchých úvodzoviek.

Ak ich zabudneme uviesť v správnych úvodzovkách, kompilátor Java ich bude považovať za názvy premenných.

Ak nie je deklarovaná „premenná“, môžeme vidieť chybu „nenájdem symbol“.

Avšak ak zabudneme dvakrát citovať a String to nie je platný názov premennej Javy, kompilátor Java nahlási chybu „nelegálny začiatok výrazu“.

Pozrime sa na to na príklade:

balík com.baeldung; verejná trieda ForgetQuoting {public int calcSumOnly (int x, int y, reťazcová operácia) {if (operation.equals (+)) {return x + y; } hodiť novú UnsupportedOperationException ("operácia nie je podporovaná:" + operácia); }} 

Zabudli sme citovať String+ vo vnútri hovoru na rovná sa metóda a + zjavne nie je platný názov premennej Java.

Teraz to skúsme zostaviť:

$ javac ForgetQuoting.java ForgetQuoting.java:5: chyba: nelegálny začiatok výrazu if (operation.equals (+)) {^ 1 chyba 

Riešenie problému je jednoduché - zabalenie String literály v dvojitých úvodzovkách:

balík com.baeldung; verejná trieda ForgetQuoting {public int calcSumOnly (int x, int y, reťazcová operácia) {if (operation.equals ("+")) {return x + y; } hodiť novú UnsupportedOperationException ("operácia nie je podporovaná:" + operácia); }} 

6. Záver

V tomto krátkom článku sme hovorili o piatich rôznych scenároch, ktoré zvýšia chybu „nezákonného začiatku vyjadrovania“.

Väčšinou pri vývoji aplikácií Java používame IDE, ktoré nás varuje, keď sa zistia chyby. Tieto pekné funkcie IDE môžu pomôcť chrániť sa pred touto chybou.

S chybou sa však môžeme občas stretnúť. Dobré pochopenie chyby nám preto pomôže rýchlo chybu nájsť a opraviť.