← Back to Questions
Java

What is custom exception in Java?

Learn What is custom exception in Java? with simple explanations, real-time examples, interview tips and practical use cases.

Custom exception in Java is a user-defined exception created by developers to represent application-specific or business-specific error conditions.

In simple words:

Custom exceptions allow developers to create meaningful and business-oriented error handling instead of using only predefined Java exceptions.


Why Custom Exceptions are Important?

Built-in exceptions are generic and may not clearly explain business problems.


Example Problem

Suppose a banking application throws:

ArithmeticException

for insufficient balance.

This is confusing.


Better Solution

InsufficientFundsException

Custom Exception Overview Diagram


Business Rule Violated

      |
      v

Custom Exception Created

      |
      v

Exception Thrown

      |
      v

Application Handles Error


Why Developers Create Custom Exceptions?

  • Meaningful error messages
  • Better debugging
  • Business-specific validation
  • Cleaner architecture
  • Improved maintainability
  • Centralized error handling

How to Create Custom Exception?

By extending:

  • Exception
  • RuntimeException

1. Checked Custom Exception

Extends:

Exception

Example

class InvalidAgeException
extends Exception {

    InvalidAgeException(
        String message
    ) {

        super(message);

    }

}

What Happens Here?

  • Custom exception class created
  • Constructor passes message to parent Exception class

Creation Flow


Developer Creates Class

      |
      v

Class Extends Exception

      |
      v

Custom Exception Ready


Using Custom Exception

class Test {

    static void validate(
        int age
    )
    throws InvalidAgeException {

        if(age < 18) {

            throw new InvalidAgeException(
                "Age must be 18+"
            );

        }

    }

}

Execution Flow


Business Validation Runs

      |
      v

Invalid Condition Found

      |
      v

Custom Exception Thrown

      |
      v

Caller Handles Exception


Handling Custom Exception

try {

    validate(15);

}
catch(
    InvalidAgeException e
) {

    System.out.println(
        e.getMessage()
    );

}

Output

Age must be 18+

2. Unchecked Custom Exception

Extends:

RuntimeException

Example

class InvalidAmountException
extends RuntimeException {

    InvalidAmountException(
        String message
    ) {

        super(message);

    }

}

Difference?

Compiler does not force handling.


Unchecked Flow


Runtime Validation Fails

      |
      v

Custom RuntimeException Thrown

      |
      v

JVM Handles if Not Caught


Difference Between Checked and Unchecked Custom Exceptions

Feature Checked Custom Exception Unchecked Custom Exception
Parent Class Exception RuntimeException
Compiler Checks? Yes No
Handling Mandatory? Yes No
Usage Recoverable Problems Programming/Business Errors

Why super(message) Used?

Because Exception class stores error message internally.


Flow


Custom Message Passed

      |
      v

Parent Exception Stores Message

      |
      v

getMessage() Returns Message


Custom Exception with Error Code

class PaymentException
extends Exception {

    int errorCode;

    PaymentException(
        String msg,
        int code
    ) {

        super(msg);

        this.errorCode = code;

    }

}

Why Useful?

Enterprise systems often need:

  • Error codes
  • Transaction IDs
  • Audit details

Enterprise Flow


Business Error Happens

      |
      v

Custom Exception Created

      |
      v

Error Code Attached

      |
      v

Monitoring System Logs Failure


Custom Exception in Banking Systems

Banking applications heavily use custom exceptions for:

  • Insufficient balance
  • Fraud detection
  • Invalid account
  • Transaction timeout
  • Payment failure

Banking Example

class InsufficientFundsException
extends Exception {

    InsufficientFundsException(
        String msg
    ) {

        super(msg);

    }

}

Usage

if(balance < amount) {

    throw new InsufficientFundsException(
        "Insufficient Balance"
    );

}

Banking Flow


Money Transfer Requested

      |
      v

Balance Validation Fails

      |
      v

InsufficientFundsException Thrown

      |
      v

Transaction Rolled Back


Custom Exception in E-Commerce Systems

E-commerce platforms use custom exceptions for:

  • Out of stock
  • Invalid coupon
  • Payment declined
  • Order cancellation

E-Commerce Example

class ProductOutOfStockException
extends RuntimeException {

    ProductOutOfStockException(
        String msg
    ) {

        super(msg);

    }

}

Custom Exception in Spring Boot

Spring Boot applications heavily use custom exceptions for:

  • REST API errors
  • Validation failures
  • Authentication issues
  • Business rule violations

Spring Boot Example

class UserNotFoundException
extends RuntimeException {

    UserNotFoundException(
        String msg
    ) {

        super(msg);

    }

}

Global Exception Handler

@RestControllerAdvice
class GlobalHandler {

    @ExceptionHandler(
        UserNotFoundException.class
    )

    public String handle(
        UserNotFoundException e
    ) {

        return e.getMessage();

    }

}

Spring Boot Flow


REST API Request

      |
      v

Business Validation Fails

      |
      v

Custom Exception Thrown

      |
      v

Global Handler Returns Response


Custom Exception in Microservices

Microservices architectures use custom exceptions for:

  • Distributed transaction failures
  • Service communication issues
  • API validation
  • Business workflow errors
  • Retry and fallback logic

Microservice Flow


Service Request Received

      |
      v

Business Rule Violated

      |
      v

Custom Exception Triggered

      |
      v

Fallback or Retry Logic Executes


Can Custom Exceptions Have Methods?

Yes.


Example

class PaymentException
extends Exception {

    public String getErrorType() {

        return "PAYMENT_ERROR";

    }

}

Why Useful?

Enterprise systems often categorize errors.


Custom Exception Best Architecture


BaseBusinessException

      |

      +-------> PaymentException

      |

      +-------> ValidationException

      |

      +-------> SecurityException


Advantages of Custom Exceptions

  • Meaningful business errors
  • Improved debugging
  • Cleaner architecture
  • Centralized error management
  • Better API responses
  • Enterprise-ready design

Disadvantages

  • Too many custom exceptions increase complexity
  • Poor naming creates confusion
  • Improper hierarchy makes maintenance difficult

Common Interview Mistake

Many developers think custom exceptions are only for large applications.

Actually:

  • Even medium applications benefit from meaningful exceptions.

Another Common Mistake

Many developers create generic custom exceptions like:

MyException

This is poor practice.


Better Naming Examples

  • UserNotFoundException
  • PaymentFailedException
  • InvalidTransactionException
  • AccessDeniedException

Best Practices

  • Use meaningful exception names
  • Create hierarchy for enterprise systems
  • Include proper messages
  • Use checked exceptions for recoverable problems
  • Use unchecked exceptions for business logic violations
  • Log exceptions properly

Realtime Enterprise Example

Online Payment Gateway


Payment Request Received

      |
      v

Fraud Validation Fails

      |
      v

FraudDetectionException Thrown

      |
      v

Global Exception Handler Captures Error

      |
      v

Safe Error Response Returned


Related Learning Topics


Professional Interview Answer

Custom exception in Java is a user-defined exception created to represent application-specific or business-specific error conditions more meaningfully than generic Java exceptions. Custom exceptions are typically created by extending Exception for checked exceptions or RuntimeException for unchecked exceptions. They are heavily used in enterprise applications, Spring Boot systems, banking platforms, distributed microservices, REST APIs, e-commerce applications, Hibernate ORM frameworks, and cloud-native systems for handling business validations, transaction failures, authentication issues, payment processing errors, distributed workflow failures, and API-level error responses. Custom exceptions improve code readability, maintainability, debugging, centralized error handling, and domain-driven architecture by providing clear business-oriented error messages and structured exception hierarchies.


Frequently Asked Questions

What is custom exception in Java?

A custom exception is a user-defined exception created for business-specific error handling.

How do we create custom exception?

By extending Exception or RuntimeException class.

What is the difference between checked and unchecked custom exceptions?

Checked exceptions are compiler-checked, while unchecked exceptions occur during runtime.

Why are custom exceptions important?

They provide meaningful business-level error handling and improve maintainability.

Where are custom exceptions used heavily?

Banking systems, Spring Boot applications, REST APIs, microservices, and enterprise platforms.

Why this Java question is important?

This interview question helps candidates understand real-time backend development concepts, practical problem solving, coding fundamentals, system design basics and production-ready application behavior.

Practice this question carefully for Java backend roles, Spring Boot developer interviews, microservices interviews, company interviews and full-stack developer preparation.

About the Author

Naresh Kumar is a Senior Java Backend Engineer with experience building enterprise applications using Java, Spring Boot, Microservices, Docker, Kubernetes and Cloud technologies.