Java fordító hiba: illegális kifejezéskezdés
1. Áttekintés
Az „illegális kifejezéskezdés” gyakori hiba, amellyel a fordítás idején szembesülhetünk.
Ebben az oktatóanyagban példákat mutatunk be, amelyek bemutatják a hiba fő okait és megoldási módjait.
2. Hiányzó göndör nadrágtartó
A hiányzó göndör zárójelek az „illegális kifejezés kezdet” hibához vezethetnek. Először nézzünk meg egy példát:
csomag com.baeldung; public class MissingCurlyBraces {public void printSum (int x, int y) {System.out.println ("Számítási eredmény:" + calcSum (x, y)); public int calcSum (int x, int y) {return x + y; }}
Ha összeállítjuk a fenti osztályt:
$ javac MissingCurlyBraces.java MissingCurlyBraces.java:7: hiba: illegális kifejezéskezdés public int calcSum (int x, int y) {^ MissingCurlyBraces.java:7: error: ';' várható nyilvános int calcSum (int x, int y) {.....
Hiányzik a göndör záró zárójel printSum () a probléma kiváltó oka.
A probléma megoldása egyszerű - hozzáadva a záró göndör zárójelet a printSum () módszer:
csomag com.baeldung; public class MissingCurlyBraces {public void printSum (int x, int y) {System.out.println ("Számítási eredmény:" + calcSum (x, y)); } public int calcSum (int x, int y) {return x + y; }}
Mielőtt továbblépnénk a következő szakaszra, nézzük át a fordító hibáját.
A fordító jelentése szerint a 7. sor okozza az „illegális kifejezéskezdés” hibát. Valójában tudjuk, hogy a probléma kiváltó oka a 6. sorban található. Ebből a példából ezt megtudhatjuk néha a fordító hibái nem mutatják a kiváltó okot, és meg kell javítanunk a szintaxist az előző sorban.
3. Hozzáférés-módosító belső módszer
Java-ban csak egy metódus vagy konstruktor belsejében deklarálhatunk lokális változókat. A metódusban nem használhatunk hozzáférési módosítót a helyi változókhoz, mert hozzáférhetőségüket a módszer hatóköre határozza meg.
Ha megszegjük a szabályt, és hozzáférési módosítók vannak a metódus belsejében, akkor felmerül az „illegális kifejezéskezelés” hiba.
Lássuk ezt működés közben:
csomag com.baeldung; public class AccessModifierInMethod {public void printSum (int x, int y) {private int összeg = x + y; System.out.println ("Számítási eredmény:" + összeg); }}
Ha megpróbáljuk lefordítani a fenti kódot, látni fogjuk a fordítási hibát:
$ javac AccessModifierInMethod.java AccessModifierInMethod.java:5: hiba: illegális kifejezéskezdés private int sum = x + y; ^ 1 hiba
A magán a hozzáférés-módosító könnyen megoldja a problémát:
csomag com.baeldung; public class AccessModifierInMethod {public void printSum (int x, int y) {int összeg = x + y; System.out.println ("Számítási eredmény:" + összeg); }}
4. Beágyazott módszerek
Néhány programozási nyelv, például a Python, támogatja a beágyazott módszereket. De, A Java nem támogat egy metódust egy másik módszeren belül.
Az „illegális kifejezéskezdés” fordító hibával szembesülünk, ha beágyazott módszereket hozunk létre:
csomag com.baeldung; public class NestedMethod {public void printSum (int x, int y) {System.out.println ("Számítási eredmény:" + calcSum (x, y)); public int calcSum (int x, int y) {return x + y; }}}
Fordítsuk le a fenti forrásfájlt, és nézzük meg, mit jelent a Java fordító:
$ javac NestedMethod.java NestedMethod.java:6: hiba: illegális kifejezéskezdés public int calcSum (int x, int y) {^ NestedMethod.java:6: hiba: ';' várható nyilvános int calcSum (int x, int y) {^ NestedMethod.java:6: hiba: várható public int calcSum (int x, int y) {^ NestedMethod.java:6: hiba: nem állítás public int calcSum (int x, int y) {^ NestedMethod.java:6: hiba: ';' várható nyilvános int calcSum (int x, int y) {^ 5 hibák
A Java fordító öt fordítási hibáról számol be. Bizonyos esetekben egyetlen hiba több további hibát okozhat a fordítási idő alatt.
A kiváltó ok azonosítása elengedhetetlen ahhoz, hogy képesek legyünk megoldani a problémát. Ebben a példában az első „illegális kifejezéskezelési” hiba a kiváltó ok.
Gyorsan megoldhatjuk a problémát a calcSum () módszer a printSum () módszer:
csomag com.baeldung; public class NestedMethod {public void printSum (int x, int y) {System.out.println ("Számítási eredmény:" + calcSum (x, y)); } public int calcSum (int x, int y) {return x + y; }}
5. char vagy Húr Idézőjelek nélkül
Tudjuk Húr literálokat kettős idézőjelbe kell csomagolni, míg char az értékeket egyetlen idézőjel segítségével kell megadni.
Ha elfelejtjük ezeket beilleszteni a megfelelő idézetekbe, a Java fordító változó névként fogja kezelni őket.
„Nem találunk szimbólumot” hibát láthatunk, ha a „változó” nincs deklarálva.
Azonban, ha elfelejtjük duplán idézni a Húr ez nem érvényes Java változónév, a Java fordító az „illegális kifejezéskezelés” hibát jelenti.
Nézzük meg egy példán keresztül:
csomag com.baeldung; public class ForgetQuoting {public int calcSumOnly (int x, int y, String operation) {if (művelet.egyenlő (+)) {return x + y; } dobja az új UnsupportedOperationException parancsot ("a művelet nem támogatott:" + művelet); }}
Elfelejtettük idézni a Húr+ belül a hívást a egyenlő módszer, és + nyilvánvalóan nem érvényes Java változónév.
Most próbáljuk meg összeállítani:
$ javac ForgetQuoting.java ForgetQuoting.java:5: hiba: illegális kifejezéskezdés if (operation.equals (+)) {^ 1 hiba
A probléma megoldása egyszerű - csomagolás Húr literál kettős idézőjelben:
csomag com.baeldung; public class ForgetQuoting {public int calcSumOnly (int x, int y, String operation) {if (művelet.egyenlő ("+")) {return x + y; } dobja az új UnsupportedOperationException parancsot ("a művelet nem támogatott:" + művelet); }}
6. Következtetés
Ebben a rövid cikkben öt különböző forgatókönyvről beszéltünk, amelyek felvetik az „illegális kifejezéskezelés” hibát.
A Java-alkalmazások fejlesztésekor legtöbbször egy IDE-t fogunk használni, amely figyelmeztet bennünket, ha hibákat észlelünk. Ezek a szép IDE funkciók nagyban hozzájárulhatnak ahhoz, hogy megvédjenek minket ettől a hibától.
Időnként azonban még mindig találkozhatunk a hibával. Ezért a hiba megfelelő megértése segít abban, hogy gyorsan megtaláljuk és kijavítsuk a hibát.