What if your program could tell you exactly what went wrong, every time?
Creating custom exception class in Java - Why You Should Know This
Start learning this pattern below
Jump into concepts and practice - no test required
Imagine you are building a program that handles different errors, like file not found or invalid user input. You try to use the built-in error messages, but they are too general and don't explain exactly what went wrong in your special case.
Using only standard error messages can be confusing and slow down fixing problems. You might have to write many checks everywhere, and it's easy to miss important details or mix up errors. This makes your code messy and hard to understand.
Creating a custom exception class lets you define your own error type with a clear name and message. This makes your program easier to read and debug because you know exactly what kind of problem happened. It also helps you handle errors in a clean and organized way.
if (age < 0) { throw new IllegalArgumentException("Invalid age"); }
if (age < 0) { throw new NegativeAgeException("Age cannot be negative"); }
It enables you to create meaningful, specific error messages that make your program more reliable and easier to maintain.
For example, in a banking app, you can create a custom exception like InsufficientFundsException to clearly show when a user tries to withdraw more money than they have.
Standard errors can be unclear and hard to manage.
Custom exceptions give clear, specific error messages.
They help keep your code clean and easier to fix.
Practice
Solution
Step 1: Understand Java exception hierarchy
Custom exceptions must extend eitherExceptionorRuntimeExceptionto behave like exceptions.Step 2: Recognize correct inheritance
Implementing an interface or naming a classExceptiondoes not create a proper exception class.Final Answer:
Extend the Exception or RuntimeException class -> Option AQuick Check:
Custom exception = extends Exception [OK]
- Trying to implement Exception as an interface
- Naming class Exception instead of extending it
- Using throw keyword in class declaration
MyException?Solution
Step 1: Identify correct constructor syntax
Constructors have no return type and callsuper(message)to pass the message to the parent Exception class.Step 2: Check each option
public MyException(String message) { super(message); } correctly defines a constructor callingsuper(message). public MyException() { this.message = message; } incorrectly assigns message without declaration. public void MyException(String message) { super(message); } has a void return type, so it's not a constructor. public MyException(String message) { print(message); } calls a non-existent methodprint.Final Answer:
public MyException(String message) { super(message); } -> Option CQuick Check:
Constructor calls super(message) = public MyException(String message) { super(message); } [OK]
- Adding void return type to constructor
- Not calling super(message) in constructor
- Trying to assign message directly without declaration
class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
public class Test {
public static void main(String[] args) {
try {
throw new MyException("Error occurred");
} catch (MyException e) {
System.out.println(e.getMessage());
}
}
}Solution
Step 1: Understand exception throwing and catching
The code throws aMyExceptionwith message "Error occurred" and catches it immediately.Step 2: Check output from getMessage()
The catch block printse.getMessage(), which returns the message passed to the exception.Final Answer:
Error occurred -> Option AQuick Check:
Exception message printed = Error occurred [OK]
- Expecting class name instead of message
- Thinking code won't compile due to custom exception
- Missing try-catch block causing runtime error
public class MyException extends Exception {
public void MyException(String message) {
super(message);
}
}Solution
Step 1: Check constructor syntax
Constructors must not have a return type. Here,voidmakes it a method, not a constructor.Step 2: Understand consequences
Without a proper constructor, the class uses default constructor which does not callsuper(message), causing errors when throwing with message.Final Answer:
Constructor has a void return type, so it's a method, not a constructor -> Option DQuick Check:
Constructor no return type = Constructor has a void return type, so it's a method, not a constructor [OK]
- Adding void return type to constructor
- Assuming import Exception is needed
- Thinking super() cannot be called in subclass
InvalidDataException. Which is the correct way to define it?Solution
Step 1: Understand checked vs unchecked exceptions
Unchecked exceptions extendRuntimeException, checked exceptions extendException.Step 2: Analyze each option
public class InvalidDataException extends RuntimeException { public InvalidDataException(String message) { super(message); } } correctly extendsRuntimeExceptionwith proper constructor. public class InvalidDataException extends Exception { public InvalidDataException(String message) { super(message); } } creates a checked exception. public class InvalidDataException implements RuntimeException { public InvalidDataException(String message) { super(message); } } tries to implement an exception class, which is invalid. public class InvalidDataException extends Throwable { public InvalidDataException(String message) { super(message); } } extendsThrowabledirectly, which is not recommended for custom exceptions.Final Answer:
public class InvalidDataException extends RuntimeException { public InvalidDataException(String message) { super(message); } } -> Option BQuick Check:
Unchecked exception = extends RuntimeException [OK]
- Extending Exception for unchecked exceptions
- Trying to implement exception classes
- Extending Throwable directly
