f you’re learning Java or working on a large project, you’ve probably seen this frustrating compiler message at least once: error: cannot find symbol
This is one of the most common errors Java developers face — and the good news is that it’s not as scary as it looks. In most cases, it simply means that Java doesn’t recognize something you’ve written in your code, such as a variable, method, or class name.
In this guide, we’ll explain what causes the “Cannot find symbol” error, walk through step-by-step solutions, and share practical debugging tips to help you fix it fast.
What Does “Cannot Find Symbol” Mean?
When you compile a Java program, the compiler checks whether every symbol (like variables, methods, classes, and objects) exists and is spelled correctly.
If Java can’t find what you’re referencing, it throws the “Cannot find symbol” error.
Here’s a simple example:
public class Example {
public static void main(String[] args) {
System.out.println(message);
}
}
Output:
Example.java:3: error: cannot find symbol
System.out.println(message);
^
symbol: variable message
location: class Example
In this example, the variable message was never declared — so the compiler doesn’t know what it is.
Common Causes of “Cannot Find Symbol” Error
There are several reasons why this error occurs:
- Misspelled variable, method, or class names
Java is case-sensitive, soMyVariableandmyvariableare different. - Using variables before declaring them
If you reference a variable before defining it, the compiler can’t find it. - Missing imports
Forgetting to import a class (likeimport java.util.Scanner;) will trigger the error. - Incorrect scope
You may have declared a variable inside a method but are trying to use it outside. - Wrong file or class names
The public class name and filename must match exactly (e.g.,MyClass.java→public class MyClass). - Dependencies not added to classpath
External libraries or JARs may not be included during compilation.
Fixes for “Cannot Find Symbol” in Java
1. Check Spelling and Capitalization
Even a single typo can cause this error. Carefully review your code:
int Number = 10;
System.out.println(number); // Error! 'Number' ≠ 'number'
Fix:
System.out.println(Number);
2. Declare Variables Before Using Them
Always declare variables before referencing them.
System.out.println(name); // Error
String name = "Java";
Fix:
String name = "Java";
System.out.println(name);
3. Verify Class and File Names
If your class is declared as:
public class HelloWorld { ... }
Then your file name must be:
HelloWorld.java
Otherwise, Java won’t compile it correctly.
4. Add Missing Imports
If you’re using classes like Scanner, ArrayList, or List, make sure they’re imported:
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
Without these, Java won’t recognize the symbols and will throw this error.
5. Check Variable or Method Scope
If you define a variable inside a method, you can’t access it outside that method.
public class Example {
public void test() {
int count = 5;
}
public void show() {
System.out.println(count); // Error: count not visible here
}
}
Fix: Move count to class scope or pass it as a parameter.
6. Rebuild or Clean the Project
If you’re using an IDE (like IntelliJ IDEA or Eclipse), cached builds or mismatched files might cause this issue. Fix:
- In IntelliJ IDEA → go to Build → Rebuild Project
- In Eclipse → go to Project → Clean → Clean All
7. Check for Missing Libraries or JAR Files
If your code references an external class or library, ensure that:
- The JAR is added to the classpath (
javac -cp path\to\library.jar MyClass.java) - Your IDE recognizes the dependency (under Project Structure → Libraries)
Example: Fixing a Real-World Scenario
Let’s fix this example:
import java.util.Arraylist; // Wrong capitalization!
public class Demo {
public static void main(String[] args) {
ArrayList<String> items = new ArrayList<>();
}
}
Error:
Demo.java:2: error: cannot find symbol
import java.util.Arraylist;
^
symbol: class Arraylist
Correct version:
import java.util.ArrayList;
public class Demo {
public static void main(String[] args) {
ArrayList<String> items = new ArrayList<>();
System.out.println("List initialized successfully!");
}
}
Advanced Tip: Enable Verbose Compiler Output
To get more information about the error, you can compile your file using:
javac -Xlint:all MyClass.java
This shows detailed warnings that help identify missing imports, unused variables, or deprecation issues.
Wrapping Up
The “Cannot find symbol” error in Java may look intimidating, but it’s simply the compiler telling you it can’t locate something in your code.
By checking your spelling, variable declarations, imports, and scope, you can resolve it quickly.
Always remember: most compiler errors are about details. Once you get used to Java’s strict structure, these mistakes become easy to spot and fix.