Java Exception Decoder
Learn what common Java errors and exceptions mean, why they happen, and how to fix them. This page helps learners move from confusion to diagnosis with practical explanations and examples.
Why this page matters
Many Java learners do not struggle only because of syntax. They struggle because error messages feel opaque. A decoder page turns frustration into learning by explaining the logic behind failures.
How to use it
Search the exception name you encountered, review the explanation, inspect the example, and compare the fix. Over time, this builds debugging maturity rather than reliance on guesswork.
Best internal links
This page can link into Java basics, OOP, collections, file handling, streams, Spring Boot, and testing tutorials. It works well as a pillar resource.
NullPointerException
This happens when your code tries to use an object reference that has not been assigned a real object.
Why it happens
You declared a variable, but it is null, and then you tried to call a method,
access a field, or use it as though it already exists.
String name = null;
System.out.println(name.length());
String name = "Java";
System.out.println(name.length());
Typical fixes
- Check whether a value is null before using it
- Ensure the object is properly initialised
- Trace where the reference should have been assigned
IndexOutOfBoundsException
This occurs when you try to access a position that does not exist in an array, list, or string.
Why it happens
Java indexing starts at 0. If a list has 3 elements, valid positions are 0, 1, and 2. Accessing 3 causes failure.
int[] numbers = {10, 20, 30};
System.out.println(numbers[3]);
int[] numbers = {10, 20, 30};
System.out.println(numbers[2]);
Typical fixes
- Check array or list size before accessing
- Be careful with loop conditions such as
i < lengthnoti <= length - Print size and index during debugging
NumberFormatException
This happens when Java tries to convert text into a number, but the text is not a valid numeric value.
Why it happens
Methods like Integer.parseInt() expect numeric strings. Non-numeric characters cause failure.
String age = "twenty";
int value = Integer.parseInt(age);
String age = "20";
int value = Integer.parseInt(age);
Typical fixes
- Validate user input before parsing
- Trim unwanted spaces
- Use try-catch when parsing uncertain input
FileNotFoundException
This occurs when your program expects a file at a given path, but Java cannot find it.
Why it happens
The file name may be wrong, the path may be incorrect, or the file may not exist where the program expects it.
Scanner sc = new Scanner(new File("data.txt"));
File file = new File("src/data.txt");
Scanner sc = new Scanner(file);
Typical fixes
- Check the exact file location
- Use absolute or verified relative paths during testing
- Print the file path for debugging
ConcurrentModificationException
This usually appears when you modify a collection while iterating over it in an unsafe way.
Why it happens
Java detects structural changes to a collection during iteration and throws an exception to protect consistency.
List<String> names = new ArrayList<>();
names.add("A");
names.add("B");
for (String n : names) {
if (n.equals("A")) {
names.remove(n);
}
}
Iterator<String> it = names.iterator();
while (it.hasNext()) {
if (it.next().equals("A")) {
it.remove();
}
}
Typical fixes
- Use an iterator when removing during traversal
- Collect items to remove later
- Understand collection mutation rules
ClassCastException
This happens when your code tries to cast an object into a type it does not actually belong to.
Why it happens
A cast tells Java to treat an object as another type. If the object is not truly that type, the cast fails.
Object value = "Java";
Integer number = (Integer) value;
Object value = "Java";
if (value instanceof String) {
String text = (String) value;
}
Typical fixes
- Check type with
instanceofbefore casting - Avoid unnecessary casting through better design
- Use generics to reduce unsafe type handling