- Java - Home
- Java - Overview
- Java - History
- Java - Features
- Java Vs. C++
- JVM - Java Virtual Machine
- Java - JDK vs JRE vs JVM
- Java - Environment Setup
- Java - Hello World Program
- Java - Comments
- Java - Basic Syntax
- Java - Variables
- Java - Data Types
- Java - Type Casting
- Java - Unicode System
- Java - User Input
- Java - Date & Time
Java Operators
- Java - Operators
- Java - Arithmetic Operators
- Java - Assignment Operators
- Java - Relational Operators
- Java - Logical Operators
- Java - Bitwise Operators
- Java Operator Precedence & Associativity
- Java - Unary Operators
Java Control Statements
- Java - Decision Making
- Java - If Else Statement
- Java - Switch Statement
- Java - Loop Control
- Java - For Loop
- Java - For-Each Loop
- Java - While Loop
- Java - Do While Loop
- Java - Break Statement
- Java - Continue Statement
Object Oriented Programming
- Java - OOPs Concepts
- Java - Object & Classes
- Java - Class Attributes
- Java - Class Methods
- Java - Methods
- Java - Variables Scope
- Java - Constructors
- Java - Access Modifiers
- Java - Inheritance
- Java - Aggregation
- Java - Polymorphism
- Java - Overriding
- Java - Method Overloading
- Java - Dynamic Binding
- Java - Static Binding
- Java - Instance Initializer Block
- Java - Abstraction
- Java - Encapsulation
- Java - Interfaces
- Java - Packages
- Java - Inner Classes
- Java - Static Class
- Java - Anonymous Class
- Java - Singleton Class
- Java - Wrapper Classes
- Java - Enums
- Java - Enum Constructor
- Java - Enum Strings
Java Built-in Classes
- Java - Number
- Java - Boolean
- Java - Characters
- Java - Arrays
- Java - Multi-Dimensional Arrays
- Java - Final Arrays
- Java - Math Class
Java File Handling
- Java - Files
- Java - Create a File
- Java - Write to File
- Java - Read Files
- Java - Delete Files
- Java - Directories
- Java - I/O Streams
Java Error & Exceptions
- Java - Exceptions
- Java - try-catch Block
- Java - try-with-resources
- Java - Multi-catch Block
- Java - Nested try Block
- Java - Finally Block
- Java - throw Exception
- Java - Exception Propagation
- Java - Built-in Exceptions
- Java - Custom Exception
- Java - Chained Exception
Java Multithreading
- Java - Multithreading
- Java - Thread Life Cycle
- Java - Creating a Thread
- Java - Starting a Thread
- Java - Joining Threads
- Java - Naming Thread
- Java - Thread Scheduler
- Java - Thread Pools
- Java - Main Thread
- Java - Thread Priority
- Java - Daemon Threads
- Java - Thread Group
- Java - Shutdown Hook
Java Synchronization
- Java - Synchronization
- Java - Block Synchronization
- Java - Static Synchronization
- Java - Inter-thread Communication
- Java - Thread Deadlock
- Java - Interrupting a Thread
- Java - Thread Control
- Java - Reentrant Monitor
Java Networking
- Java - Networking
- Java - Socket Programming
- Java - URL Processing
- Java - URL Class
- Java - URLConnection Class
- Java - HttpURLConnection Class
- Java - Socket Class
- Java - Generics
Java Collections
Java Interfaces
- Java - List Interface
- Java - Queue Interface
- Java - Map Interface
- Java - SortedMap Interface
- Java - Set Interface
- Java - SortedSet Interface
Java Data Structures
Java Collections Algorithms
Advanced Java
- Java - Command-Line Arguments
- Java - Lambda Expressions
- Java - Sending Email
- Java - Applet Basics
- Java - Javadoc Comments
- Java - Autoboxing and Unboxing
- Java - File Mismatch Method
- Java - REPL (JShell)
- Java - Multi-Release Jar Files
- Java - Private Interface Methods
- Java - Inner Class Diamond Operator
- Java - Multiresolution Image API
- Java - Collection Factory Methods
- Java - Module System
- Java - Nashorn JavaScript
- Java - Optional Class
- Java - Method References
- Java - Functional Interfaces
- Java - Default Methods
- Java - Base64 Encode Decode
- Java - Switch Expressions
- Java - Teeing Collectors
- Java - Microbenchmark
- Java - Text Blocks
- Java - Dynamic CDS archive
- Java - Z Garbage Collector (ZGC)
- Java - Null Pointer Exception
- Java - Packaging Tools
- Java - Sealed Classes
- Java - Record Classes
- Java - Hidden Classes
- Java - Pattern Matching
- Java - Compact Number Formatting
- Java - Garbage Collection
- Java - JIT Compiler
Java Miscellaneous
- Java - Recursion
- Java - Regular Expressions
- Java - Serialization
- Java - Strings
- Java - Process API Improvements
- Java - Stream API Improvements
- Java - Enhanced @Deprecated Annotation
- Java - CompletableFuture API Improvements
- Java - Marker Interface
- Java - Streams
- Java - Datetime Api
- Java 8 - New Features
- Java 9 - New Features
- Java 10 - New Features
- Java 11 - New Features
- Java 12 - New Features
- Java 13 - New Features
- Java 14 - New Features
- Java 15 - New Features
- Java 16 - New Features
Java APIs & Frameworks
Java Class References
- Java - Scanner
- Java - Arrays
- Java - Strings
- Java - Date
- Java - ArrayList
- Java - Vector
- Java - Stack
- Java - PriorityQueue
- Java - LinkedList
- Java - ArrayDeque
- Java - HashMap
- Java - LinkedHashMap
- Java - WeakHashMap
- Java - EnumMap
- Java - TreeMap
- Java - IdentityHashMap
- Java - HashSet
- Java - EnumSet
- Java - LinkedHashSet
- Java - TreeSet
- Java - BitSet
- Java - Dictionary
- Java - Hashtable
- Java - Properties
- Java - Collection
- Java - Array
Java Useful Resources
Java - Chained Exceptions
In Java, exceptions occur when the normal flow of the program is disrupted, causing the program to stop. Chained exceptions help relate one exception to another, where one exception is considered the cause of another.
Understanding Chained Exceptions
Chained exceptions are associated such that the previous exception causes each exception in the chain. Chained exception helps us to debug errors and find the root cause of the errors.
For Example
Consider a situation in a Banking System where a user tries to transfer money. When the user logs in, the user logs in successfully, but the transaction database connection fails, which then throws an SQLException.
Here, the transferMoney() method hides the SQLException because it is low-level. Then, it wraps that SQLException into a custom exception called TransactionFailedException.
The SQLException is the root cause, and the TransactionFailedException is the chained exception for the SQLException.
Supported by Throwable Class
In Java, the Throwable class provides constructors and methods to support chained exceptions.
Constructors
The following are the two constructors supported by the Throwable Class −
-
Throwable(Throwable cause) − The cause is the current exception.
- Throwable(String msg, Throwable cause) − The msg is the exception message, and the cause is the current exception.
Methods
The following are the two methods supported by the Throwable Class −
-
getCause() − This method returns the actual cause.
- initCause() − This method sets the cause for calling an exception.
Example 1
In the following example, we are causing an ArithmeticException in the test method, and then we are wrapping the ArithmeticException inside a custom exception, ApplicationException, and throwing it. This demonstrates the Chained Exceptions in Java −
public class Tester {
public static void main(String[] args) {
try {
test();
} catch (ApplicationException e) {
e.printStackTrace();
}
}
public static void test() throws ApplicationException {
try {
int a = 0;
int b = 1;
System.out.println(b / a);
} catch (Exception e) {
throw new ApplicationException("Chained Exception",e);
}
}
}
class ApplicationException extends Exception {
public ApplicationException(String message, Exception cause) {
super(message, cause);
}
}
Output
ApplicationException: Chained Exception at Tester.test(Tester.java:15) at Tester.main(Tester.java:4) Caused by: java.lang.ArithmeticException: / by zero at Tester.test(Tester.java:13) ... 1 more
Example 2
In the following example, we are causing a NullPointerException in the test method, and then we are wrapping the NullPointerException inside a custom exception, DemoException, and throwing it. This demonstrates the Chained Exceptions in Java −
public class Tester {
public static void main(String[] args) {
try {
test();
} catch (DemoException e) {
e.printStackTrace();
}
}
public static void test() throws DemoException {
try {
String str = null;
System.out.println(str.length());
} catch (Exception e) {
throw new DemoException("Chained Exception", e);
}
}
}
class DemoException extends Exception {
public DemoException(String message, Exception cause) {
super(message, cause);
}
}
Output
DemoException: Chained Exception at Tester.test(Tester.java:14) at Tester.main(Tester.java:4) Caused by: java.lang.NullPointerException: Cannot invoke "String.length()" because "<local0>" is null at Tester.test(Tester.java:12) ... 1 more