Bird
Raised Fist0
Javaprogramming~10 mins

Creating custom exception class in Java - Visual Walkthrough

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - Creating custom exception class
Define class extending Exception
Add constructors for message
Throw custom exception in code
Catch custom exception
Handle or print error message
End
First, define a new class that extends Exception, add constructors, then throw and catch it in your code.
Execution Sample
Java
class MyException extends Exception {
  MyException(String message) {
    super(message);
  }
}

public class Main {
  public static void main(String[] args) {
    try {
      throw new MyException("Error happened");
    } catch (MyException e) {
      System.out.println(e.getMessage());
    }
  }
}
Defines a custom exception class and throws it with a message.
Execution Table
StepActionEvaluationResult
1Define class MyException extending ExceptionClass createdMyException class ready
2Create constructor with message parameterConstructor stores messageConstructor ready
3Throw new MyException("Error happened")Exception object createdException thrown
4Catch MyException in try-catch blockCatch block activatedException handled
5Print exception messageMessage retrievedOutput: Error happened
6Program continues or endsNo crashNormal flow resumes
💡 Exception thrown and caught, program continues normally
Variable Tracker
VariableStartAfter ThrowAfter CatchFinal
exceptionObjectnullMyException instance with message "Error happened"Same instance caughtHandled
Key Moments - 3 Insights
Why do we extend Exception to create a custom exception?
Extending Exception lets Java know this is a type of error that can be thrown and caught, as shown in step 1 of the execution_table.
What happens if we throw the custom exception but do not catch it?
If not caught, the program will stop with an error. Step 4 shows catching prevents this and allows normal flow.
How does the message get passed and printed?
The message is passed to the superclass Exception via super(message) in the constructor (step 2), then retrieved when printing in step 5.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the result at step 3 when the exception is thrown?
AProgram ends immediately
BException caught and handled
CException object created and thrown
DConstructor is called
💡 Hint
Check the 'Result' column in step 3 of execution_table
At which step does the program handle the exception to avoid crashing?
AStep 2
BStep 4
CStep 1
DStep 6
💡 Hint
Look for 'Catch block activated' in the execution_table
If the constructor did not call super(message), what would happen?
AThe exception message would not be stored or printed
BThe program would crash immediately
CThe exception would not be thrown
DThe catch block would not work
💡 Hint
Refer to step 2 and step 5 about message passing and printing
Concept Snapshot
Create a custom exception by:
- Defining a class extending Exception
- Adding constructors calling super(message)
- Throwing with 'throw new MyException("msg")'
- Catching with try-catch
- Accessing message via getMessage()
Full Transcript
To create a custom exception in Java, you define a new class that extends Exception. This class includes a constructor that calls super(message) to store an error message. When you want to signal an error, you throw an instance of this class with a message. In your code, you catch this exception in a try-catch block to handle it gracefully. This prevents the program from crashing and allows you to print or log the error message. The execution steps show defining the class, throwing the exception, catching it, and printing the message, then continuing normal program flow.

Practice

(1/5)
1. What is the correct way to start creating a custom exception class in Java?
easy
A. Extend the Exception or RuntimeException class
B. Implement the Exception interface
C. Create a class with the same name as Exception
D. Use the throw keyword in the class declaration

Solution

  1. Step 1: Understand Java exception hierarchy

    Custom exceptions must extend either Exception or RuntimeException to behave like exceptions.
  2. Step 2: Recognize correct inheritance

    Implementing an interface or naming a class Exception does not create a proper exception class.
  3. Final Answer:

    Extend the Exception or RuntimeException class -> Option A
  4. Quick Check:

    Custom exception = extends Exception [OK]
Hint: Always extend Exception or RuntimeException for custom exceptions [OK]
Common Mistakes:
  • Trying to implement Exception as an interface
  • Naming class Exception instead of extending it
  • Using throw keyword in class declaration
2. Which of the following is the correct constructor for a custom exception class named MyException?
easy
A. public MyException() { this.message = message; }
B. public void MyException(String message) { super(message); }
C. public MyException(String message) { super(message); }
D. public MyException(String message) { print(message); }

Solution

  1. Step 1: Identify correct constructor syntax

    Constructors have no return type and call super(message) to pass the message to the parent Exception class.
  2. Step 2: Check each option

    public MyException(String message) { super(message); } correctly defines a constructor calling super(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 method print.
  3. Final Answer:

    public MyException(String message) { super(message); } -> Option C
  4. Quick Check:

    Constructor calls super(message) = public MyException(String message) { super(message); } [OK]
Hint: Constructor must call super(message) without return type [OK]
Common Mistakes:
  • Adding void return type to constructor
  • Not calling super(message) in constructor
  • Trying to assign message directly without declaration
3. What will be the output of this code?
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());
        }
    }
}
medium
A. Error occurred
B. MyException
C. Compilation error
D. No output

Solution

  1. Step 1: Understand exception throwing and catching

    The code throws a MyException with message "Error occurred" and catches it immediately.
  2. Step 2: Check output from getMessage()

    The catch block prints e.getMessage(), which returns the message passed to the exception.
  3. Final Answer:

    Error occurred -> Option A
  4. Quick Check:

    Exception message printed = Error occurred [OK]
Hint: getMessage() prints the exception message passed in constructor [OK]
Common Mistakes:
  • Expecting class name instead of message
  • Thinking code won't compile due to custom exception
  • Missing try-catch block causing runtime error
4. Identify the error in this custom exception class:
public class MyException extends Exception {
    public void MyException(String message) {
        super(message);
    }
}
medium
A. super(message) cannot be called in this class
B. Missing import statement for Exception
C. Class must implement Serializable interface
D. Constructor has a void return type, so it's a method, not a constructor

Solution

  1. Step 1: Check constructor syntax

    Constructors must not have a return type. Here, void makes it a method, not a constructor.
  2. Step 2: Understand consequences

    Without a proper constructor, the class uses default constructor which does not call super(message), causing errors when throwing with message.
  3. Final Answer:

    Constructor has a void return type, so it's a method, not a constructor -> Option D
  4. Quick Check:

    Constructor no return type = Constructor has a void return type, so it's a method, not a constructor [OK]
Hint: Constructors never have a return type, not even void [OK]
Common Mistakes:
  • Adding void return type to constructor
  • Assuming import Exception is needed
  • Thinking super() cannot be called in subclass
5. You want to create a custom unchecked exception named InvalidDataException. Which is the correct way to define it?
hard
A. public class InvalidDataException implements RuntimeException { public InvalidDataException(String message) { super(message); } }
B. public class InvalidDataException extends RuntimeException { public InvalidDataException(String message) { super(message); } }
C. public class InvalidDataException extends Exception { public InvalidDataException(String message) { super(message); } }
D. public class InvalidDataException extends Throwable { public InvalidDataException(String message) { super(message); } }

Solution

  1. Step 1: Understand checked vs unchecked exceptions

    Unchecked exceptions extend RuntimeException, checked exceptions extend Exception.
  2. Step 2: Analyze each option

    public class InvalidDataException extends RuntimeException { public InvalidDataException(String message) { super(message); } } correctly extends RuntimeException with 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); } } extends Throwable directly, which is not recommended for custom exceptions.
  3. Final Answer:

    public class InvalidDataException extends RuntimeException { public InvalidDataException(String message) { super(message); } } -> Option B
  4. Quick Check:

    Unchecked exception = extends RuntimeException [OK]
Hint: Unchecked exceptions extend RuntimeException, not Exception [OK]
Common Mistakes:
  • Extending Exception for unchecked exceptions
  • Trying to implement exception classes
  • Extending Throwable directly