
- 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 - throwing Exception
If a method does not handle a checked exception, the method must declare it using the throws keyword. The throws keyword appears at the end of a method's signature.
You can throw an exception, either a newly instantiated one or an exception that you just caught, by using the throw keyword.
Try to understand the difference between throws and throw keywords, throws is used to postpone the handling of a checked exception and throw is used to invoke an exception explicitly.
Syntax
Following is the syntax of throwing an exception using throws and throw −
method(parameters) throws exception { // Method implementation throw new exception(); }
The following method declares that it throws a RemoteException −
Consider the below example code to use throws and throw keywords −
class Example { void deposit(double amount) throws RemoteException { // Method implementation throw new RemoteException(); } // Remainder of class definition }
A method can declare that it throws more than one exception, in which case the exceptions are declared in a list separated by commas. For example, the following method declares that it throws a RemoteException and an InsufficientFundsException −
class className { void withdraw(double amount) throws RemoteException, InsufficientFundsException { // Method implementation } // Remainder of class definition }
Example - Usage of Throws and Throw keywords
Following example shows the use of throw keyword to send an exception in case a invalid argument is passed. We're calling a divide method which checks if second parameter is zero then it will throw an IllegalArgumentException with a custom message. As IllegalArgumentException is an unchecked exception, the divide method is not required to declares throws statement. Now as parent method is not handling the exception, JVM intercepts the same and prints the error message and terminates the program.
Example.groovy
class Example { static void main(String[] args) { int a = 3; int b = 0; println("result:" + divide(a,b)); } static int divide(int a, int b) { if(b == 0) { throw new IllegalArgumentException("second argument cannot be zero."); } return a / b; } }
Output
This will produce the following result−
Caught: java.lang.IllegalArgumentException: second argument cannot be zero. java.lang.IllegalArgumentException: second argument cannot be zero. at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62) at Example.divide(main.groovy:11) at Example.main(main.groovy:6) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
Example - Throwing an exception on invalid arguments
Following example shows the use of throw and throws keywords to send an exception in case a invalid argument is passed and handle the exception. We're calling a divide method which checks if second parameter is zero then it will throw an Exception with a custom message. As Exception is a checked exception, the divide method is required to declares throws statement. Now as parent method is to either handle the exception or declares the throws exception, we're handling the exception and printing the message.
Example.groovy
class Example { static void main(String[] args) { int a = 3; int b = 0; try { println("result:" + divide(a,b)); } catch (Exception e) { println("Exception: " + e); } } static int divide(int a, int b) throws Exception { if(b == 0) { throw new Exception("second argument cannot be zero."); } return a / b; } }
Output
This will produce the following result−
Exception: java.lang.Exception: second argument cannot be zero.
Example - Using throws and throw in main and other method
Following example shows the use of throw and throws keywords to send an exception in case a invalid argument is passed and exception is not handled. We're calling a divide method which checks if second parameter is zero then it will throw an Exception with a custom message. As Exception is a checked exception, the divide method is required to declares throws statement. Now as parent method is to either handle the exception or declares the throws exception, we're declaring to throw the exception and JVM will handle the exception.
Example.groovy
class Example { static void main(String[] args) throws Exception { int a = 3; int b = 0; println("result:" + divide(a,b)); } static int divide(int a, int b) throws Exception { if(b == 0) { throw new Exception("second argument cannot be zero."); } return a / b; } }
Output
This will produce the following result−
Caught: java.lang.Exception: second argument cannot be zero. java.lang.Exception: second argument cannot be zero. at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62) at Example.divide(main.groovy:10) at Example.main(main.groovy:5) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)