When should we create a user-defined exception class in Java?

We should create our own exceptions in Java. Keep the following points in mind when writing our own exception classes

  • All exceptions must be a child of Throwable.
  • If we want to write a checked exception that is automatically enforced by the Handle or Declare Rule, we need to extend the Exception class.
  • If we want to write a runtime exception, we need to extend the RuntimeException class.

We can define our own Exception class as below:

class MyException extends Exception {

We just need to extend the Exception class to create our own Exception class. These are considered to be checked exceptions. The following InsufficientFundsException class is a user-defined exception that extends the Exception class, making it a checked exception.


Live Demo

// File Name InsufficientFundsException.java
import java.io.*;
class InsufficientFundsException extends Exception {
   private double amount;
   public InsufficientFundsException(double amount) {
      this.amount = amount;
   public double getAmount() {
      return amount;

// File Name CheckingAccount.java
class CheckingAccount {
   private double balance;
   private int number;
   public CheckingAccount(int number) {
      this.number = number;
   public void deposit(double amount) {
      balance += amount;
   public void withdraw(double amount) throws InsufficientFundsException {
      if(amount <= balance) {
         balance -= amount;
      else {
         double needs = amount - balance;
         throw new InsufficientFundsException(needs);
   public double getBalance() {
      return balance;
   public int getNumber() {
      return number;
// File Name BankDemo.java
public class BankDemo {
   public static void main(String [] args) {
      CheckingAccount c = new CheckingAccount(101);
      System.out.println("Depositing $500...");
      try {
         System.out.println("\nWithdrawing $100...");
         System.out.println("\nWithdrawing $600...");
      } catch(InsufficientFundsException e) {
         System.out.println("Sorry, but you are short $" + e.getAmount());


Depositing $500...
Withdrawing $100...
Withdrawing $600...
Sorry, but you are short $200.0
at CheckingAccount.withdraw(BankDemo.java:32)
at BankDemo.main(BankDemo.java:53)