Java Exception propagation

Exception propagation is a way of propagating exceptions from method to method. Let an exception occur in a method at the top of the call stack and if it is not caught then it propagates to the previous method in the call stack, if it is not caught here then it again propagates to the previous method in the call stack and so on until either it is caught or reaches the bottom of the stack.

 

Example: Exception propagation in case of unchecked exception.

class ArithmaticTest{
	
	public void division(int num1, int num2) {
		//java.lang.ArithmeticException here 
                //and not caught hence propagate to method1.
		System.out.println(num1/num2);
	}
	
	public void method1(int num1, int num2) {
		//not caught here and hence propagate to method2.
		division(num1, num2);
	}
	
	public void method2(int num1, int num2){
		try{
			method1(num1, num2);
		}catch(Exception e){//caught exception here.
			System.out.println("Exception Handled");
		}
	}
}

public class ExceptionPropagationExample1 {
	public static void main(String args[]){
		//creating ArithmaticTest object
		ArithmaticTest obj =  new ArithmaticTest();
		
		//method call
		obj.method2(20, 0);
	}
}

Output

Exception Handled

 

Example: Exception propagation in case of checked exception.

Note: Checked exceptions are not propagated in exception change.

import java.io.IOException;

class Test{
	
	public void method3() {
		//compile time error here because 
                //checked exceptions can't be propagated.
		throw new IOException();
	}
	
	public void method1(){
		method3();
	}
	
	public void method2(){
		try{
			method1();
		}catch(Exception e){
			System.out.println("Exception Handled");
		}
	}
}

public class ExceptionPropagationExample2 {
	public static void main(String args[]){
		//creating Test object
		Test obj =  new Test();
		
		//method call
		obj.method2();
	}
}

Output

Exception in thread "main" java.lang.Error: 
Unresolved compilation problem:
Unhandled exception type IOException
at com.w3schools.business.Test.method3
(ExceptionPropagationExample2.java:13)
at com.w3schools.business.Test.method1
(ExceptionPropagationExample2.java:17)
at com.w3schools.business.Test.method2
(ExceptionPropagationExample2.java:22)
at com.w3schools.business.ExceptionPropagationExample2.main
(ExceptionPropagationExample2.java:35)