Грешка в Java Compiler: незаконно начало на израз

1. Общ преглед

„Незаконното начало на изразяване“ е често срещана грешка, с която може да се сблъскаме по време на компилацията.

В този урок ще видим примери, които илюстрират основните причини за тази грешка и как да я поправим.

2. Липсващи къдрави скоби

Липсващите фигурни скоби могат да доведат до грешка „незаконно начало на израза“. Нека първо разгледаме един пример:

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

Ако компилираме горния клас:

$ javac MissingCurlyBraces.java MissingCurlyBraces.java:7: error: illegal start of expression public int calcSum(int x, int y) { ^ MissingCurlyBraces.java:7: error: ';' expected public int calcSum(int x, int y) { ..... 

Липсата на затварящата се къдрава скоба на printSum () е основната причина за проблема.

Решението на проблема е просто - добавянето на затварящата се къдрава скоба към метода printSum () :

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

Преди да преминем към следващия раздел, нека прегледаме грешката на компилатора.

Компилаторът съобщава, че 7-ми ред причинява грешка „незаконно стартиране на израз“. Всъщност знаем, че основната причина за проблема е в 6-ти ред. От този пример научаваме, че понякога грешките на компилатора не сочат към реда с основната причина и ще трябва да коригираме синтаксиса в предишния ред.

3. Модификатор на достъп вътре

В Java можем да декларираме само локални променливи вътре в метод или конструктор . Не можем да използваме модификатор на достъп за локални променливи вътре в метод, тъй като техните достъпности се определят от обхвата на метода.

Ако нарушим правилото и имаме модификатори за достъп вътре в метод, ще се появи грешка „незаконно стартиране на израз“.

Нека да видим това в действие:

package com.baeldung; public class AccessModifierInMethod { public void printSum(int x, int y) { private int sum = x + y; System.out.println("Calculation Result:" + sum); } }

Ако се опитаме да компилираме горния код, ще видим грешката при компилацията:

$ javac AccessModifierInMethod.java AccessModifierInMethod.java:5: error: illegal start of expression private int sum = x + y; ^ 1 error

Премахването на модификатора за частен достъп лесно решава проблема:

package com.baeldung; public class AccessModifierInMethod { public void printSum(int x, int y) { int sum = x + y; System.out.println("Calculation Result:" + sum); } }

4. Вложени методи

Някои езици за програмиране, като Python, поддържат вложени методи. Но Java не поддържа метод в друг метод.

Ще се сблъскаме с грешката на компилатора „незаконно стартиране на израз“, ако създадем вложени методи:

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

Нека да компилираме горния изходен файл и да видим какво съобщава компилаторът на Java:

$ javac NestedMethod.java NestedMethod.java:6: error: illegal start of expression public int calcSum ( int x, int y) { ^ NestedMethod.java:6: error: ';' expected public int calcSum ( int x, int y) { ^ NestedMethod.java:6: error:  expected public int calcSum ( int x, int y) { ^ NestedMethod.java:6: error: not a statement public int calcSum ( int x, int y) { ^ NestedMethod.java:6: error: ';' expected public int calcSum ( int x, int y) { ^ 5 errors

Компилаторът на Java съобщава за пет грешки при компилацията. В някои случаи една грешка може да причини множество допълнителни грешки по време на компилиране.

Идентифицирането на първопричината е от съществено значение за нас, за да можем да разрешим проблема. В този пример първата грешка „незаконно стартиране на израз“ е основната причина.

Можем бързо да разрешим проблема, като преместим метода calcSum () извън метода printSum () :

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

5. char или String без кавички

Знаем, че String литералите трябва да бъдат увити в двойни кавички, докато char стойностите трябва да бъдат цитирани с единични кавички.

Ако забравим да ги приложим в правилните кавички, Java компилаторът ще ги третира като имена на променливи .

Може да видим грешка „не мога да намеря символ“, ако „променливата“ не е декларирана.

Ако обаче пропуснем да кавираме двойно низ, който не е валидно име на променлива Java, Java компилаторът ще докладва за грешка „незаконно начало на израз“ .

Нека го разгледаме чрез пример:

package com.baeldung; public class ForgetQuoting { public int calcSumOnly(int x, int y, String operation) { if (operation.equals(+)) { return x + y; } throw new UnsupportedOperationException("operation is not supported:" + operation); } } 

Забравихме да цитираме String + в извикването на метода equals и очевидно + не е валидно име на променлива Java.

Сега нека опитаме да го съставим:

$ javac ForgetQuoting.java ForgetQuoting.java:5: error: illegal start of expression if (operation.equals(+)) { ^ 1 error 

Решението на проблема е просто - опаковане на String литерали в двойни кавички:

package com.baeldung; public class ForgetQuoting { public int calcSumOnly(int x, int y, String operation) { if (operation.equals("+")) { return x + y; } throw new UnsupportedOperationException("operation is not supported:" + operation); } } 

6. Заключение

В тази кратка статия говорихме за пет различни сценария, които ще повдигнат грешката „незаконно начало на изразяване“.

По-голямата част от времето, когато разработваме Java приложения, ще използваме IDE, която ни предупреждава при откриване на грешки. Тези хубави функции на IDE могат да помогнат да ни предпазят от тази грешка.

Въпреки това, все пак може да срещнем грешката от време на време. Следователно доброто разбиране на грешката ще ни помогне бързо да я намерим и отстраним.