- Ошибка компилятора Java: незаконное начало выражения
- 1. Обзор
- 2. Отсутствующие Фигурные Скобки
- 3. Модификатор Доступа Внутри Метода
- 4. Вложенные методы
- 5. символ или строка Без кавычек
- 6. Заключение
- Читайте ещё по теме:
- How to Fix “Illegal Start of Expression” in Java
- Illegal Start of Expression: What is it?
- Illegal Start of Expression Examples
- Access modifiers on local variables
Ошибка компилятора Java: незаконное начало выражения
См. Примеры, иллюстрирующие основные причины ошибки “незаконное начало выражения” и способы ее устранения.
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) < .
Отсутствие закрывающей фигурной скобки print Sum() является основной причиной проблемы.
Решение проблемы простое — добавление закрывающей фигурной скобки в метод 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
Удаление модификатора private access легко решает проблему:
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() из метода print Sum() :
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. символ или строка Без кавычек
Мы знаем, что 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); > >
Мы забыли процитировать строку |//+ внутри вызова метода 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 могут значительно защитить нас от этой ошибки.
Тем не менее, мы все еще можем время от времени сталкиваться с этой ошибкой. Поэтому хорошее понимание ошибки поможет нам быстро найти и исправить ошибку.
Читайте ещё по теме:
How to Fix “Illegal Start of Expression” in Java
Over the past two and a half decades, Java has consistently been ranked as one of the top 3 most popular programming languages in the world [1], [2]. As a compiled language, any source code written in Java needs to be translated (i.e., compiled) into machine code before it can be executed. Unlike other compiled languages where programs are compiled directly into machine code, the Java compiler converts the source code into intermediate code, or bytecode, which is then translated into machine code for a specific platform by the Java Virtual Machine (JVM). This, in the simplest of terms, is how Java achieves its platform independence (Fig. 1).
One advantage that comes with being a compiled language is the fact that many errors stemming from incorrect language syntax and semantics (such as “illegal start of expression”) can be captured in the compilation process, before a program is run and they inadvertently find their way into production environments. Since they occur at the time of compilation, these errors are commonly referred to as compile-time errors.
The Java compiler can detect syntax and static semantic errors, although it is incapable of recognizing dynamic semantic errors. The latter are logical errors that don’t violate any formal rules and as such cannot be detected at compile-time; they only become visible at runtime and can be captured by well-designed tests.
When it encounters an error it can recognize, the Java compiler generates a message indicating the type of error and the position in the source file where this error occurred. Syntax errors are the easiest to detect and correct.
Illegal Start of Expression: What is it?
Expressions are one of the main building blocks of any Java application. These are constructs that compute values and control the execution flow of the program. As its name implies, the “illegal start of expression” error refers to an expression that violates some rule at the point where it starts, usually right after another expression ends; the assumption here is that the preceding expression is correct, i.e., free of errors.
The “illegal start of expression” error often arises from an insufficient familiarity with the language or due to basic negligence. The cause for this error can usually be found at the beginning of an expression or, in some cases, the entire expression might be incorrect or misplaced.
Illegal Start of Expression Examples
Access modifiers on local variables
A local variable in Java is any variable declared inside the body of a method or, more generally, inside a block. A local variable’s accessibility is predetermined by the block in which it is declared—the variable can be accessed strictly within the scope of its enclosing block. Therefore, access modifiers have no use here and, if introduced, will raise the “illegal start of expression” error (Fig. 2(a)). Removing the access modifier (as shown on line 5 in Fig. 2(b)) resolves the Java error.
Announcing Our New Java Error Monitoring SDK
Can Constructors Throw Exceptions in Java
How to Fix and Avoid NullPointerException in Java
"Rollbar allows us to go from alerting to impact analysis and resolution in a matter of minutes. Without it we would be flying blind."