Being a java developer, you must encounter numberless bugs and errors on daily basis. Whether you are a beginner or experienced software engineers, errors are inevitable but over time you can get experienced enough to be able to correct them efficiently. One such very commonly occurring error is “Illegal start of expression Java error”.
The illegal start of expression java error is a dynamic error which means you would encounter it at compile time with “javac” statement (Java compiler). This error is thrown when the compiler detects any statement that does not abide by the rules or syntax of the Java language. There are numerous scenarios where you can get an illegal start of expression error. Missing a semicolon at the end of The line or an omitting an opening or closing brackets are some of the most common reasons but it can be easily fixed with slight corrections and can save you a lot of time in debugging.
Following are some most common scenarios where you would face an illegal start of expression Java error along with the method to fix them,
1. Use of Access Modifiers with local variables
Variables that are declared inside a method are called local variables. Their functionality is exactly like any other variable but they have very limited scope just within the specific block that is why they cannot be accessed from anywhere else in the code except the method in which they were declared.
Access modifier (public, private, or protected) can be used with a simple variable but it is not allowed to be used with local variables inside the method as its accessibility is defined by its method scope.
See the code snippet below,
1. public class classA {
2. public static void main(String args[])
3. {
4. public int localVar = 5;
5. }
6. }
Here the public access modifier is used with a local variable (localVar).
This is the output you will see on the terminal screen:
$javac classA.java classA.java:4: error: illegal start of expression public int localVar = 5; ^ 1 error
It reports 1 error that simply points at the wrong placement of access modifier. The solution is to either move the declaration of the local variable outside the method (it will not be a local variable after that) or simply donot use an access modifier with local variables.
2. Method Inside of Another Method
Unlike some other programming languages, Java does not allows defining a method inside another method. Attempting to do that would throw the Illegal start of expression error.
Below is the demonstration of the code:
1. public class classA {
2. public static void main(String args[]) {
3. int localVar = 5;
4. public void anotherMethod(){
5. System.out.println("it is a method inside a method.");
6. }
7. }
8. }
This would be the output of the code,
$javac classA.java classA.java:5: error: illegal start of expression public void anotherMethod() ^ classA.java:5: error: illegal start of expression public void anotherMethod() ^ classA.java:5: error: ';' expected public void anotherMethod() ^ 3 errors
It is a restriction in Java so you just have to avoid using a method inside a method to write a successfully running code. The best practice would be to declare another method outside the main method and call it in the main as per your requirements.
3. Class Inside a Method Must Not Have Modifier
Java allows its developers to write a class within a method, this is legal and hence would not raise any error at compilation time. That class will be a local type, similar to local variables and the scope of that inner class will also be restricted just within the method. However, an inner class must not begin with access modifiers, as modifiers are not to be used inside the method.
In the code snippet below, the class “mammals” is defined inside the main method which is inside the class called animals. Using the public access modifier with the “mammals” class will generate an illegal start of expression java error.
1. public class Animals {
2. public static final void main(String args[]){
3. public class mammals { }
4. }
5. }
The output will be as follows,
$javac Animals.java Animals.java:4: error: illegal start of expression public class mammals { } ^ 1 error
This error can be fixed just by not using the access modifier with the inner class or you can define a class inside a class but outside of a method and instantiating that inner class inside the method.
Below is the corrected version of code as well,
1. class Animals {
2.
3. // inside class
4. private class Mammals {
5. public void print() {
6. System.out.println("This is an inner class");
7. }
8. }
9.
10. // Accessing the inside class from the method within
11. void display_Inner() {
12. Mammals inside = new Mammals();
13. inside.print();
14. }
15. }
16. public class My_class {
17.
18. public static void main(String args[]) {
19. // Instantiating the outer class
20. Animals classA = new Animals();
21. // Accessing the display_Inner() method.
22. classA.display_Inner();
23. }
24. }
Now you will get the correct output,
$javac Animals.java $java -Xmx128M -Xms16M Animals This is an inner class
4.Nested Methods
Some recent programming languages, like Python, supports nested methods but Java does not allow to make a method inside another method. You will encounter the illegal start of expression java error if you try to create nested methods.
Below mentioned is a small code that attempts to declare a method called calSum inside the method called outputSum,
1. public class classA {
2. public void outputSum(int num1, int num2) {
3. System.out.println("Calculate Result:" + calSum(x, y));
4. public int calSum ( int num1, int num2) {
5. return num1 + num2;
6. }
7. }
8. }
And here is the output,
$ javac classA.java NestedMethod.java:6: error: illegal start of expression public int calSum ( int num1, int num2) { ^ classA.java:6: error: ';' expected public int calSum ( int num1, int num2) { ^ classA.java:6: error: expected public int calSum ( int num1, int num2) { ^ NestedMethod.java:6: error: not a statement public int calSum ( int num1, int num2) { ^ NestedMethod.java:6: error: ';' expected public calSum ( int num1, int num2) { ^ 5 errors
The Java compiler has reported five compilation errors. Other 4 unexpected errors are due to the root cause. In this code, the first “illegal start of expression” error is the root cause. It is very much possible that a single error can cause multiple further errors during compile time. Same is the case here. We can easily solve all the errors by just avoiding the nesting of methods. The best practice, in this case, would be to move the calSum() method out of the outputSum() method and just call it in the method to get the results.
See the corrected code below,
1. public class classA {
2. public void outputSum(int num1, int num2) {
3. System.out.println("Calculation Result:" + calSum(x, y));
4. }
5. public int calSum ( int num1, int num2) {
6. return x + y;
7. }
8. }
5. Missing out the Curly “{ }“ Braces
Skipping a curly brace in any method can result in an illegal start of expression java error. According to the syntax of Java programming, every block or class definition must start and end with curly braces. If you skip any curly braces, the compiler will not be able to identify the starting or ending point of a block which will result in an error. Developers often make this mistake because there are multiple blocks and methods nested together which results in forgetting closing an opened curly bracket. IDEs usually prove to be helpful in this case by differentiating the brackets by assigning each pair a different colour and even identify if you have forgotten to close a bracket but sometimes it still gets missed and result in an illegal start of expression java error.
In the following code snippet, consider this class called Calculator, a method called calSum perform addition of two numbers and stores the result in the variable total which is then printed on the screen. The code is fine but it is just missing a closing curly bracket for calSum method which will result in multiple errors.
1. public class Calculator{
2. public static void calSum(int x, int y) {
3. int total = 0;
4. total = x + y;
5. System.out.println("Sum = " + total);
6.
7. public static void main(String args[]){
8. int num1 = 3;
9. int num2 = 2;
10. calcSum(num1,num2);
11. }
12. }
Following errors will be thrown on screen,
$javac Calculator.java Calculator.java:12: error: illegal start of expression public int calcSum(int x, int y) { ^ Calculator.java:12: error: ';' expected Calculator.java:13: error: reached end of file while parsing } ^ 3 error
The root cause all these illegal starts of expression java error is just the missing closing bracket at calSum method.
While writing your code missing a single curly bracket can take up a lot of time in debugging especially if you are a beginner so always lookout for it.
6. String or Character Without Double Quotes “-”
Just like missing a curly bracket, initializing string variables without using double quotes is a common mistake made by many beginner Java developers. They tend to forget the double quotes and later get bombarded with multiple errors at the run time including the illegal start of expression errors.
If you forget to enclose strings in the proper quotes, the Java compiler will consider them as variable names. It may result in a “cannot find symbol” error if the “variable” is not declared but if you miss the double-quotations around a string that is not a valid Java variable name, it will be reported as the illegal start of expression Java error.
The compiler read the String variable as a sequence of characters. The characters can be alphabets, numbers or special characters every symbol key on your keyboard can be a part of a string. The double quotes are used to keep them intact and when you miss a double quote, the compiler can not identify where this series of characters is ending, it considers another quotation anywhere later in the code as closing quotes and all that code in between as a string causing the error.
Consider this code snippet below; the missing quotation marks around the values of the operator within if conditions will generate errors at the run time.
1. public class Operator{
2. public static void main(String args[]){
3. int num1 = 10;
4. int num2 = 8;
5. int output = 0;
6. Scanner scan = new Scanner(System.in);
7. System.out.println("Enter the operation to perform(+OR)");
8. String operator= scan.nextLine();
9. if(operator == +)
10. {
11. output = num1 + num2;
12. }
13. else if(operator == -)
14. {
15. output = num1 - num2;
16. }
17. else
18. {
19. System.out.prinln("Invalid Operator");
20. }
21. System.out.prinln("Result = " + output);
22. }
String values must be always enclosed in double quotation marks to avoid the error similar to what this code would return,
$javac Operator.java Operator.java:14: error: illegal start of expression if(operator == +) ^ Operator.java:19: error: illegal start of expression if(operator == -) ^ 3 error
Conclusion
In a nutshell, to fix an illegal start of expression error, look for mistakes before the line mentioned in the error message for missing brackets, curly braces or semicolons. Recheck the syntax as well. Always look for the root cause of the error and always recompile every time you fix a bug to check as it could be the root cause of all errors.
See Also: Java Feature Spotlight – Sealed Classes
Such run-time errors are designed to assist developers, if you have the required knowledge of the syntax, the rules and restrictions in java programming and the good programming skills than you can easily minimize the frequency of this error in your code and in case if it occurs you would be able to quickly remove it.
Do you have a knack for fixing codes? Then we might have the perfect job role for you. Our careers portal features openings for senior full-stack Java developers and more.
Have you ever come across the error illegal start of expression in Java and wondered how to solve it? Let’s go through the post and study how we address the Illegal start of expression Java error.
This is a dynamic error, which means that the compiler finds something that doesn’t follow the rules or syntax of Java programming. Beginners mostly face this bug in Java. Since it is dynamic, it is prompted at compile time i.e., with the javac statement.
This error can be encountered in various scenarios. The following are the most common errors. They are explained on how they can be fixed.
1. Prefixing the Local Variables with Access Modifiers
Variables inside a method or a block are local variables. Local variables have scope within their specific block or method; that is, they cannot be accessed anywhere inside the class except the method in which they are declared. Access modifiers: public, private, and protected are illegal to use inside the method with local variables as its method scope defines their accessibility.
This can be explained with the help of an example:
Class LocalVar { public static void main(String args[]) { int variable_local = 10 } }
2. Method Inside of Another Method
A method cannot have another method inside its scope. Using a method inside another method would throw the “Illegal start of expression” error. The error would occur irrespective of using an access modifier with the function name.
Below is the demonstration of the code:
Class Method { public static void main (String args[]) { public void calculate() { } } }
Class Method { public static void main (String args[]) { void calculate() { } } }
3. Class Inside a Method Must Not Have Modifier
Similarly, a method can contain a class inside its body; this is legal and hence would not give an error at compile time. However, make note classes do not begin with access modifiers, as modifiers cannot be present inside the method.
In the example below, the class Car is defined inside the main method; this method is inside the class Vehicle. Using the public modifier with the class Car would give an error at run time, as modifiers must not be present inside a method.
class Vehicle { public static final void main(String args[]) { public class Car { } } }
4. Missing Curly “{}“ Braces
Skipping the curly braces of any method block can result in having an “illegal start of expression” error. The error will occur because it would be against the syntax or against the rules of Java programming, as every block or class definition must start and end with curly braces. The developer might also need to define another class or method depending on the requirement of the program. Defining another class or method would, in turn, have modifiers as well, which is illegal for the method body.
In the following code, consider the class Addition, the method main adds two numbers and stores them in the variable sum. Later, the result is printed using the method displaySum. An error would be shown on the terminal as the curly brace is missing at the end of the method main.
public class Addition { static int sum; public static void main(String args[]) { int x = 8; int y= 2; sum=0; sum= x + y; { System.out.println("Sum = " + sum); } }
5. String Character Without Double Quotes “”
Initializing string variables without the double quotes is a common mistake made by many who are new to Java, as they tend to forget the double quotes and later get puzzled when the error pops up at the run time. Variables having String data type must be enclosed within the double quotes to avoid the “illegal start of expression” error in their code.
The String variable is a sequence of characters. The characters might not just be alphabets, they can be numbers as well or special characters like @,$,&,*,_,-,+,?, / etc. Therefore, enclose the string variables within the double quotes to avoid getting an error.
Consider the sample code below; the missing quotes around the values of the variable operator generates an error at the run time.
import java.util.*; public class Operator { public static void main(String args[]) { int a = 10; int b = 8; int result =0; Scanner scan = new Scanner(System.in); System.out.println("Enter the operation to be performed"); String operator= scan.nextLine(); if(operator == +) { result = a+b; } else if(operator == -) { result = a-b; } else { System.out.prinln("Invalid Operator"); } System.out.prinln("Result = " + result); }
6. Summary
To sum up, the “Illegal start of expression” error occurs when the Java compiler finds something inappropriate with the source code at the time of execution. To debug this error, try looking at the lines preceding the error message for missing brackets, curly braces, or semicolons and check the syntax.
Useful tip: Remember, in some cases, a single syntax error sometimes can cause multiple “Illegal start of expression” errors. Therefore, evaluating the root cause of the error and always recompiling when you fix the bug that means avoiding making multiple changes without compilation at each step.
7. Download the Source Code
Last updated on Jan. 10th, 2022
In this post, we will see how to fix «illegal start of expression» in java.
You will get this error while using javac command in command prompt. In eclipse or any other ide, it will give you more helpful compile time error.
There can be multiple reasons for getting this error.
Using private, public or protected modifiers inside a method
You might know that you can not use private, public or protected modifier inside a method. If you use it, you will get illegal start of expression.
public class MyClass { public static void main(String[] args) { private int count=0; } } |
When you run javac Command, you will get below error.
$javac MyClass.java
/MyClass.java:4: error: illegal start of expression
private int count=0;
^
1 error
When you use the same code in eclipse ide, you will get below error.
Illegal modifier for parameter count; only final is permitted
As you can see eclipse ide provides better information regarding this error.
Using method inside a method
You might know that you cannot have method inside another method. If you put it, you will get illegal start of expression.
Actually, it is again due to public static modifiers only
public class MyClass { public static void main(String[] args) { public static int count() { return 0; } } } |
When you run javac Command, you will get below error.
$javac MyClass.java
MyClass.java:4: error: illegal start of expression
public static int count()
^
MyClass.java:4: error: illegal start of expression
public static int count()
^
MyClass.java:4: error: ‘;’ expected
public static int count()
^
MyClass.java:4: error: ‘;’ expected
public static int count()
^
4 errors
Forgot to add curly braces
If you forgot to add curly braces, you will get again get this error.
public class MyClass { public static void main(String args[]) { int count=0; public static void myMethod() { System.out.println(«My method»); } } |
$javac MyClass.java
/MyClass.java:6: error: illegal start of expression
public static void myMethod()
^
/MyClass.java:6: error: illegal start of expression
public static void myMethod()
^
/MyClass.java:6: error: ‘;’ expected
public static void myMethod()
^
/MyClass.java:6: error: ‘;’ expected
public static void myMethod()
^
/MyClass.java:10: error: reached end of file while parsing
}
^
5 errors
but eclipse ide, you will get below error.
Syntax error, insert “}” to complete MethodBody
That’s all about illegal start of expression. I hope you will be able to solve the issue with the help of this post.