Exception propagation helps your program handle errors by passing problems up the chain until something can fix them.
Exception propagation in Java
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
Java
public void method() throws ExceptionType { // code that might throw ExceptionType }
The throws keyword tells callers this method might throw an exception.
If a method calls another that throws a checked exception, it must handle or declare it.
Examples
Java
public void readFile() throws IOException { // code that reads a file }
readFile() and propagates the IOException up.Java
public void process() throws IOException { readFile(); // might throw IOException }
start() method catches the exception and handles it.Java
public void start() { try { process(); } catch (IOException e) { System.out.println("Error handled here: " + e.getMessage()); } }
Sample Program
This program shows exception propagation. readFile() throws an IOException. process() calls readFile() and propagates the exception. start() catches and handles it.
Java
import java.io.IOException; public class ExceptionPropagationDemo { public static void readFile() throws IOException { throw new IOException("File not found"); } public static void process() throws IOException { readFile(); } public static void start() { try { process(); } catch (IOException e) { System.out.println("Caught exception: " + e.getMessage()); } } public static void main(String[] args) { start(); } }
Important Notes
Unchecked exceptions (like RuntimeException) do not need to be declared or caught.
Always handle exceptions at a level where you can fix or report them properly.
Summary
Exception propagation passes errors up to callers until handled.
Use throws to declare exceptions a method might throw.
Catch exceptions where you can handle or report them well.
Practice
1. What does
exception propagation mean in Java?easy
Solution
Step 1: Understand exception propagation concept
When an exception occurs, Java looks for a matching catch block in the current method. If none is found, it passes the exception to the caller method.Step 2: Follow the exception up the call stack
This passing continues up the call stack until a catch block handles it or the program terminates if uncaught.Final Answer:
An exception is passed up the call stack until caught or program ends -> Option AQuick Check:
Exception moves up call stack = A [OK]
Hint: Exception moves up call stack until caught [OK]
Common Mistakes:
- Thinking exceptions are ignored automatically
- Believing JVM fixes exceptions silently
- Confusing exceptions with warnings
2. Which of the following is the correct way to declare a method that might throw an exception?
easy
Solution
Step 1: Recall correct syntax for throws clause
The keywordthrowsis used followed by the exception class name without parentheses.Step 2: Check each option syntax
public void readFile() throws IOException {} uses correct syntax:throws IOException. The other options have syntax errors.Final Answer:
public void readFile() throws IOException {} -> Option AQuick Check:
Correct throws syntax = B [OK]
Hint: Use 'throws' keyword followed by exception class name [OK]
Common Mistakes:
- Writing 'throw' instead of 'throws'
- Adding parentheses after exception name
- Using invalid symbols like '-'
3. What will be the output of the following code?
public class Test {
static void method() throws Exception {
throw new Exception("Error occurred");
}
public static void main(String[] args) {
try {
method();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}medium
Solution
Step 1: Analyze method throwing exception
The method explicitly throws a new Exception with message "Error occurred".Step 2: Check exception handling in main
The main method calls method() inside try-catch. The catch block prints the exception message.Final Answer:
Error occurred -> Option DQuick Check:
Exception caught and message printed = C [OK]
Hint: Exception message prints if caught in try-catch [OK]
Common Mistakes:
- Assuming uncaught exception causes crash
- Confusing exception message with full stack trace
- Thinking code won't compile without throws in main
4. Identify the error in this code snippet:
public class Demo {
static void risky() {
throw new IOException("IO error");
}
public static void main(String[] args) {
risky();
}
}medium
Solution
Step 1: Check exception type thrown
IOException is a checked exception and must be declared or caught.Step 2: Verify method declaration
Method risky() throws IOException but does not declare it with 'throws' keyword, causing a compile error.Final Answer:
Method risky() must declare 'throws IOException' -> Option CQuick Check:
Checked exceptions require throws declaration = A [OK]
Hint: Checked exceptions need 'throws' or try-catch [OK]
Common Mistakes:
- Ignoring throws declaration for checked exceptions
- Thinking IOException is unchecked
- Assuming main must catch exception always
5. Consider this code:
What will be the output and why?
class A {
void process() throws Exception {
throw new Exception("Error in A");
}
}
class B extends A {
@Override
void process() throws Exception {
super.process();
}
}
public class Main {
public static void main(String[] args) {
A obj = new B();
try {
obj.process();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}What will be the output and why?
hard
Solution
Step 1: Understand method overriding with exceptions
Subclass B overrides process() and calls super.process(), which throws Exception.Step 2: Exception propagates to main and is caught
Main calls obj.process() on B instance, exception thrown by A.process() propagates and is caught in main's try-catch, printing the message.Final Answer:
Error in A, because exception propagates from superclass method -> Option BQuick Check:
Exception propagates through override and caught = D [OK]
Hint: Overridden method can throw same exceptions up [OK]
Common Mistakes:
- Thinking override cannot throw exceptions declared in superclass
- Assuming exception is lost in subclass
- Confusing compile error with runtime behavior
