
- Groovy Tutorial
- Groovy - Home
- Groovy - Overview
- Groovy - Environment
- Groovy - Basic Syntax
- Groovy - Data Types
- Groovy - Variables
- Groovy - Optionals
- Groovy - Numbers
- Groovy - Strings
- Groovy - Ranges
- Groovy - Lists
- Groovy - Maps
- Groovy - Dates & Times
Groovy Operators
- Groovy - Operators
- Groovy - Arithmetic Operators
- Groovy - Assignment Operators
- Groovy - Relational Operators
- Groovy - Logical Operators
- Groovy - Bitwise Operators
- Groovy - Spaceship Operator
- Groovy - in Operator
- Groovy - Elvis Operator
- Groovy - Safe Navigation Operator
- Groovy Operator Precedence & Associativity
Control Statements
- Groovy - Decision Making
- Groovy - If Else Statement
- Groovy - Switch Statement
- Groovy - Loops
- Groovy - For Loop
- Groovy - For-in Loop
- Groovy - While Loop
- Groovy - Do While Loop
- Groovy - Break Statement
- Groovy - Continue Statement
Groovy File Handling
- Groovy - File I/O
- Java - Create a File
- Java - Write to File
- Java - Append to File
- Java - Read Files
- Java - Delete Files
- Java - File Properties
- Java - File Existence and Type
- Java - File Size
- Java - File Permissions
- Java - Directories
- Java - Listing Directories
- Java - Filtering Files/Directories
- Java - Deleting Directories
- Java - Renaming Files/Directories
Groovy Error & Exceptions
- Groovy - Exception Handling
- Groovy - try-catch Block
- Groovy - try-with-resources
- Groovy - Multi-catch Block
- Groovy - Nested try Block
- Groovy - Finally Block
- Groovy - throw Exception
- Groovy - Exception Propagation
- Groovy - Built-in Exceptions
- Groovy - Custom Exception
Groovy Multithreading
- groovy - Multithreading
- groovy - Thread Life Cycle
- groovy - Creating a Thread
- groovy - Starting a Thread
- groovy - Joining Threads
- groovy - Naming Thread
- groovy - Thread Scheduler
- groovy - Thread Pools
- groovy - Main Thread
- groovy - Thread Priority
- groovy - Daemon Threads
- groovy - Shutdown Hook
Groovy Synchronization
- groovy - Synchronization
- groovy - Block Synchronization
- groovy - Static Synchronization
- groovy - Inter-thread Communication
- groovy - Thread Deadlock
- groovy - Interrupting a Thread
- groovy - Thread Control
- groovy - Reentrant Monitor
- Groovy - Methods
- Groovy - Methods
- Groovy - Optional parenthesis
- Groovy - Named Arguments
- Groovy - Closures as Arguments
- Groovy - Method Overloading
- Groovy - Method Scope and Visibility
- Groovy - isCase Method
- Groovy - Implicit Return
- Groovy - Variable Arguments
- Groovy - Regular Expressions
- Groovy - Regular Expressions
- Groovy - Defining Regular Expressions
- Groovy - Matcher Object
- Groovy - Regex Tasks
- Groovy - XML
- Groovy - XML
- Groovy - Parsing XML
- Groovy - Creating XML
- Groovy - Modifying XML
- Groovy - Querying XML
- Groovy - Simplified Notation
- Groovy - Closure based Querying
- Groovy - Closure based Creation
- Groovy - JSON
- Groovy - JSON
- Groovy - Parsing JSON
- Groovy - Creating JSON using JsonOutput
- Groovy - Creating JSON using JsonBuilder
- Groovy - Modifying JSON
- Groovy - Error Handling
- Groovy - Handling JSON Arrays
- Groovy - JSON Array Operations
- Groovy - JSON Objects
- Groovy - JSON Object Operations
- Groovy - Generics
- Groovy - Generics
- Groovy - Declaring Generic Types
- Groovy - Bound Type Parameters
- Groovy - Wild Cards
- Groovy - Miscellaneous
- Groovy - Object Oriented
- Groovy - Closures
- Groovy - Annotations
- Groovy - JMX
- Groovy - DSLS
- Groovy - Database
- Groovy - Builders
- Groovy - Command Line
- Groovy - Unit Testing
- Groovy - Template Engines
- Groovy - Meta Object Programming
- Groovy Useful Resources
- Groovy - Quick Guide
- Groovy - Useful Resources
- Groovy - Discussion
Groovy - Custom Exception
The custom exception refers to the creation of your own exception to customize an exception according to the needs. The custom exceptions are derived from the Exception class.
Need of Groovy Custom Exceptions
- To categorize the exceptions based on the different types of errors in your project.
- To allow application-level exception handling.
Create a Custom Exception in Groovy
To create a custom exception, you need to create a class that must be inherited from the Exception class.
Syntax
Here is the syntax to create a custom class in Groovy -
class MyException extends Exception { }
You just need to extend the predefined Exception class to create your own Exception. These are considered to be checked exceptions.
Rules to Create Custom Exception
Keep the following points in mind when writing your own exception classes −
All exceptions must be a child of Throwable.
If you want to write a checked exception that is automatically enforced by the Handle or Declare Rule, you need to extend the Exception class.
If you want to write a runtime exception, you need to extend the RuntimeException class.
Example - Using Custom Exception
The following InsufficientFundsException class is a user-defined exception that extends the Exception class, making it a checked exception. An exception class is like any other class, containing useful fields and methods.
class InsufficientFundsException extends Exception { private double amount; InsufficientFundsException(double amount) { this.amount = amount; } double getAmount() { return amount; } }
To demonstrate using our user-defined exception, the following CheckingAccount class contains a withdraw() method that throws an InsufficientFundsException.
class CheckingAccount { private double balance; private int number; CheckingAccount(int number) { this.number = number; } void deposit(double amount) { balance += amount; } void withdraw(double amount) throws InsufficientFundsException { if(amount <= balance) { balance -= amount; }else { double needs = amount - balance; throw new InsufficientFundsException(needs); } } double getBalance() { return balance; } int getNumber() { return number; } }
The following Example program demonstrates invoking the deposit() and withdraw() methods of CheckingAccount.
class Example { static void main(String[] args) { CheckingAccount c = new CheckingAccount(101); println("Depositing 500..."); c.deposit(500.00); try { println("\nWithdrawing 100..."); c.withdraw(100.00); println("\nWithdrawing 600..."); c.withdraw(600.00); } catch (InsufficientFundsException e) { println("Sorry, but you are short " + e.getAmount()); e.printStackTrace(); } } } class CheckingAccount { private double balance; private int number; CheckingAccount(int number) { this.number = number; } void deposit(double amount) { balance += amount; } void withdraw(double amount) throws InsufficientFundsException { if(amount <= balance) { balance -= amount; }else { double needs = amount - balance; throw new InsufficientFundsException(needs); } } double getBalance() { return balance; } int getNumber() { return number; } } class InsufficientFundsException extends Exception { private double amount; InsufficientFundsException(double amount) { this.amount = amount; } double getAmount() { return amount; } }
Output
Compile all the above three files and run Example. This will produce the following result −
Depositing 500... Withdrawing 100... Withdrawing 600... Sorry, but you are short 200.0 InsufficientFundsException ...
In next example, we're declaring our custom exception as RuntimeException to make it as unchecked exception class as below −
class MyException extends RuntimeException { }
Example - Creating Custom Class by Extending Runtime Exception
We are extending the predefined RuntimeException class to create your own Exception as an unchecked exception. The following InsufficientFundsException class is a user-defined exception that extends the RuntimeException class, making it a unchecked exception. An RuntimeException class is like any other class, containing useful fields and methods.
class InsufficientFundsException extends RuntimeException { private double amount; public InsufficientFundsException(double amount) { this.amount = amount; } public double getAmount() { return amount; } }
The following Example program demonstrates invoking the deposit() and withdraw() methods of CheckingAccount using unchecked exception.
Example.groovy
class Example { static void main(String[] args) { CheckingAccount c = new CheckingAccount(101); println("Depositing 500..."); c.deposit(500.00); System.out.println("\nWithdrawing 100..."); c.withdraw(100.00); println("\nWithdrawing 600..."); c.withdraw(600.00); } } class CheckingAccount { private double balance; private int number; CheckingAccount(int number) { this.number = number; } void deposit(double amount) { balance += amount; } void withdraw(double amount) { if(amount <= balance) { balance -= amount; }else { double needs = amount - balance; throw new InsufficientFundsException(needs); } } double getBalance() { return balance; } int getNumber() { return number; } } class InsufficientFundsException extends RuntimeException { private double amount; InsufficientFundsException(double amount) { this.amount = amount; } double getAmount() { return amount; } }
Output
Compile and run Example. This will produce the following result −
Depositing 500... Withdrawing 100... Withdrawing 600... Caught: InsufficientFundsException InsufficientFundsException ...